Messages in this thread Patch in this message | | | From | Ram Pai <> | Subject | [PATCH 1/1 v2] x86: pkey-mprotect must allow pkey-0 | Date | Wed, 14 Mar 2018 00:46:14 -0700 |
| |
Once an address range is associated with an allocated pkey, it cannot be reverted back to key-0. There is no valid reason for the above behavior. On the contrary applications need the ability to do so.
The patch relaxes the restriction.
Tested on x86_64.
cc: Dave Hansen <dave.hansen@intel.com> cc: Michael Ellermen <mpe@ellerman.id.au> cc: Ingo Molnar <mingo@kernel.org> Signed-off-by: Ram Pai <linuxram@us.ibm.com> --- arch/x86/include/asm/pkeys.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/pkeys.h b/arch/x86/include/asm/pkeys.h index a0ba1ff..6ea7486 100644 --- a/arch/x86/include/asm/pkeys.h +++ b/arch/x86/include/asm/pkeys.h @@ -52,7 +52,7 @@ bool mm_pkey_is_allocated(struct mm_struct *mm, int pkey) * from pkey_alloc(). pkey 0 is special, and never * returned from pkey_alloc(). */ - if (pkey <= 0) + if (pkey < 0) return false; if (pkey >= arch_max_pkey()) return false; @@ -92,7 +92,8 @@ int mm_pkey_alloc(struct mm_struct *mm) static inline int mm_pkey_free(struct mm_struct *mm, int pkey) { - if (!mm_pkey_is_allocated(mm, pkey)) + /* pkey 0 is special and can never be freed */ + if (!pkey || !mm_pkey_is_allocated(mm, pkey)) return -EINVAL; mm_set_pkey_free(mm, pkey); -- 1.8.3.1
| |