Message ID | 1528937115-10132-17-git-send-email-linuxram@us.ibm.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | selftests, powerpc, x86 : Memory Protection Keys | expand |
On 06/13/2018 05:45 PM, Ram Pai wrote: > --- a/tools/testing/selftests/vm/protection_keys.c > +++ b/tools/testing/selftests/vm/protection_keys.c > @@ -577,7 +577,8 @@ int sys_pkey_free(unsigned long pkey) > int ret = syscall(SYS_pkey_free, pkey); > > if (!ret) > - shadow_pkey_reg &= clear_pkey_flags(pkey, PKEY_DISABLE_ACCESS); > + shadow_pkey_reg &= clear_pkey_flags(pkey, > + PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE); > dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret); > return ret; > } Why did you introduce this code earlier and then modify it now? BTW, my original aversion to this code still stands.
On Wed, Jun 20, 2018 at 08:07:31AM -0700, Dave Hansen wrote: > On 06/13/2018 05:45 PM, Ram Pai wrote: > > --- a/tools/testing/selftests/vm/protection_keys.c > > +++ b/tools/testing/selftests/vm/protection_keys.c > > @@ -577,7 +577,8 @@ int sys_pkey_free(unsigned long pkey) > > int ret = syscall(SYS_pkey_free, pkey); > > > > if (!ret) > > - shadow_pkey_reg &= clear_pkey_flags(pkey, PKEY_DISABLE_ACCESS); > > + shadow_pkey_reg &= clear_pkey_flags(pkey, > > + PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE); > > dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret); > > return ret; > > } > > Why did you introduce this code earlier and then modify it now? > > BTW, my original aversion to this code still stands. Have entirely got rid of this code in the new version.
diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c index 88dfa40..ba184ca 100644 --- a/tools/testing/selftests/vm/protection_keys.c +++ b/tools/testing/selftests/vm/protection_keys.c @@ -577,7 +577,8 @@ int sys_pkey_free(unsigned long pkey) int ret = syscall(SYS_pkey_free, pkey); if (!ret) - shadow_pkey_reg &= clear_pkey_flags(pkey, PKEY_DISABLE_ACCESS); + shadow_pkey_reg &= clear_pkey_flags(pkey, + PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE); dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret); return ret; }
When a key is freed, the key is no more effective. Clear the bits corresponding to the pkey in the shadow register. Otherwise it will carry some spurious bits which can trigger false-positive asserts. cc: Dave Hansen <dave.hansen@intel.com> cc: Florian Weimer <fweimer@redhat.com> Signed-off-by: Ram Pai <linuxram@us.ibm.com> --- tools/testing/selftests/vm/protection_keys.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)