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 <[email protected]>
cc: Florian Weimer <[email protected]>
Signed-off-by: Ram Pai <[email protected]>
---
 tools/testing/selftests/vm/protection_keys.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/tools/testing/selftests/vm/protection_keys.c 
b/tools/testing/selftests/vm/protection_keys.c
index c4c73e6..e82bd88 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -586,7 +586,8 @@ 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);
+               shadow_pkey_reg &= reset_bits(pkey,
+                               PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE);
        dprintf1("%s(pkey=%ld) syscall ret: %d\n", __func__, pkey, ret);
        return ret;
 }
-- 
1.7.1

Reply via email to