powerpc: ability to create execute-disabled pkeys
powerpc has hardware support to disable execute on a pkey. This patch enables the ability to create execute-disabled keys. Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
2ddc53f3a7
commit
dcf872956d
@ -30,4 +30,10 @@
|
||||
#define MAP_STACK 0x20000 /* give out an address that is best suited for process/thread stacks */
|
||||
#define MAP_HUGETLB 0x40000 /* create a huge page mapping */
|
||||
|
||||
/* Override any generic PKEY permission defines */
|
||||
#define PKEY_DISABLE_EXECUTE 0x4
|
||||
#undef PKEY_ACCESS_MASK
|
||||
#define PKEY_ACCESS_MASK (PKEY_DISABLE_ACCESS |\
|
||||
PKEY_DISABLE_WRITE |\
|
||||
PKEY_DISABLE_EXECUTE)
|
||||
#endif /* _UAPI_ASM_POWERPC_MMAN_H */
|
||||
|
@ -24,6 +24,14 @@ int pkey_initialize(void)
|
||||
{
|
||||
int os_reserved, i;
|
||||
|
||||
/*
|
||||
* We define PKEY_DISABLE_EXECUTE in addition to the arch-neutral
|
||||
* generic defines for PKEY_DISABLE_ACCESS and PKEY_DISABLE_WRITE.
|
||||
* Ensure that the bits a distinct.
|
||||
*/
|
||||
BUILD_BUG_ON(PKEY_DISABLE_EXECUTE &
|
||||
(PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE));
|
||||
|
||||
/*
|
||||
* Disable the pkey system till everything is in place. A subsequent
|
||||
* patch will enable it.
|
||||
@ -177,10 +185,18 @@ int __arch_set_user_pkey_access(struct task_struct *tsk, int pkey,
|
||||
unsigned long init_val)
|
||||
{
|
||||
u64 new_amr_bits = 0x0ul;
|
||||
u64 new_iamr_bits = 0x0ul;
|
||||
|
||||
if (!is_pkey_enabled(pkey))
|
||||
return -EINVAL;
|
||||
|
||||
if (init_val & PKEY_DISABLE_EXECUTE) {
|
||||
if (!pkey_execute_disable_supported)
|
||||
return -EINVAL;
|
||||
new_iamr_bits |= IAMR_EX_BIT;
|
||||
}
|
||||
init_iamr(pkey, new_iamr_bits);
|
||||
|
||||
/* Set the bits we need in AMR: */
|
||||
if (init_val & PKEY_DISABLE_ACCESS)
|
||||
new_amr_bits |= AMR_RD_BIT | AMR_WR_BIT;
|
||||
|
Loading…
x
Reference in New Issue
Block a user