On Wed, Jun 20, 2018 at 07:49:31AM -0700, Dave Hansen wrote: > On 06/13/2018 05:45 PM, Ram Pai wrote: > > 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. > ...--- a/tools/testing/selftests/vm/protection_keys.c > > +++ b/tools/testing/selftests/vm/protection_keys.c > > @@ -556,6 +556,9 @@ int alloc_pkey(void) > > 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); > > dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret); > > return ret; > > } > > This would be great code for an actual application. But, I'm not > immediately convinced we want sane, kind behavior in our selftest. x86 > doesn't clear the hardware register at pkey_free, so wouldn't this cause > the shadow and the hardware register to diverge? Have deleted the code in the newer version. RP