Enhancing Kernel Memory Safety with Hardware Protection Keys