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.

Signed-off-by: Ram Pai <linux...@us.ibm.com>
---
 tools/testing/selftests/vm/protection_keys.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/tools/testing/selftests/vm/protection_keys.c 
b/tools/testing/selftests/vm/protection_keys.c
index 0f2d1ce..4f4ce36 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -582,6 +582,9 @@ int alloc_pkey(void)
 int sys_pkey_free(unsigned long pkey)
 {
        int ret = syscall(SYS_pkey_free, pkey);
+
+       if (!ret)
+               shadow_pkey_reg &= reset_bits(pkey, PKEY_DISABLE_ACCESS);
        dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret);
        return ret;
 }
-- 
1.7.1

Reply via email to