From: linuxram at us.ibm.com (Ram Pai)
Subject: [PATCH v14 22/22] selftests/vm: test correct behavior of pkey-0
Date: Tue, 17 Jul 2018 06:49:25 -0700 [thread overview]
Message-ID: <1531835365-32387-23-git-send-email-linuxram@us.ibm.com> (raw)
In-Reply-To: <1531835365-32387-1-git-send-email-linuxram@us.ibm.com>
Ensure pkey-0 is allocated on start. Ensure pkey-0 can be attached
dynamically in various modes, without failures. Ensure pkey-0 can be
freed and allocated.
Signed-off-by: Ram Pai <linuxram at us.ibm.com>
---
tools/testing/selftests/vm/protection_keys.c | 66 +++++++++++++++++++++++++-
1 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c
index 569faf1..156b449 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -999,6 +999,67 @@ void close_test_fds(void)
return *ptr;
}
+void test_pkey_alloc_free_attach_pkey0(int *ptr, u16 pkey)
+{
+ int i, err;
+ int max_nr_pkey_allocs;
+ int alloced_pkeys[NR_PKEYS];
+ int nr_alloced = 0;
+ int newpkey;
+ long size;
+
+ assert(pkey_last_malloc_record);
+ size = pkey_last_malloc_record->size;
+ /*
+ * This is a bit of a hack. But mprotect() requires
+ * huge-page-aligned sizes when operating on hugetlbfs.
+ * So, make sure that we use something that's a multiple
+ * of a huge page when we can.
+ */
+ if (size >= HPAGE_SIZE)
+ size = HPAGE_SIZE;
+
+
+ /* allocate every possible key and make sure key-0 never got allocated */
+ max_nr_pkey_allocs = NR_PKEYS;
+ for (i = 0; i < max_nr_pkey_allocs; i++) {
+ int new_pkey = alloc_pkey();
+ assert(new_pkey != 0);
+
+ if (new_pkey < 0)
+ break;
+ alloced_pkeys[nr_alloced++] = new_pkey;
+ }
+ /* free all the allocated keys */
+ for (i = 0; i < nr_alloced; i++) {
+ int free_ret;
+
+ if (!alloced_pkeys[i])
+ continue;
+ free_ret = sys_pkey_free(alloced_pkeys[i]);
+ pkey_assert(!free_ret);
+ }
+
+ /* attach key-0 in various modes */
+ err = sys_mprotect_pkey(ptr, size, PROT_READ, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_WRITE, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_EXEC, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_READ|PROT_WRITE, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_READ|PROT_WRITE|PROT_EXEC, 0);
+ pkey_assert(!err);
+
+ /* free key-0 */
+ err = sys_pkey_free(0);
+ pkey_assert(!err);
+
+ newpkey = sys_pkey_alloc(0, 0x0);
+ assert(newpkey == 0);
+}
+
void test_read_of_write_disabled_region(int *ptr, u16 pkey)
{
int ptr_contents;
@@ -1144,10 +1205,10 @@ void test_kernel_gup_write_to_write_disabled_region(int *ptr, u16 pkey)
void test_pkey_syscalls_on_non_allocated_pkey(int *ptr, u16 pkey)
{
int err;
- int i = get_start_key();
+ int i;
/* Note: 0 is the default pkey, so don't mess with it */
- for (; i < NR_PKEYS; i++) {
+ for (i=1; i < NR_PKEYS; i++) {
if (pkey == i)
continue;
@@ -1455,6 +1516,7 @@ void test_mprotect_pkey_on_unsupported_cpu(int *ptr, u16 pkey)
test_pkey_syscalls_on_non_allocated_pkey,
test_pkey_syscalls_bad_args,
test_pkey_alloc_exhaust,
+ test_pkey_alloc_free_attach_pkey0,
};
void run_tests_once(void)
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: linuxram@us.ibm.com (Ram Pai)
Subject: [PATCH v14 22/22] selftests/vm: test correct behavior of pkey-0
Date: Tue, 17 Jul 2018 06:49:25 -0700 [thread overview]
Message-ID: <1531835365-32387-23-git-send-email-linuxram@us.ibm.com> (raw)
Message-ID: <20180717134925.kEfQwlH1b8IaRoOAoY2a55j1d8HmEZdcicPLEZmXF8Y@z> (raw)
In-Reply-To: <1531835365-32387-1-git-send-email-linuxram@us.ibm.com>
Ensure pkey-0 is allocated on start. Ensure pkey-0 can be attached
dynamically in various modes, without failures. Ensure pkey-0 can be
freed and allocated.
Signed-off-by: Ram Pai <linuxram at us.ibm.com>
---
tools/testing/selftests/vm/protection_keys.c | 66 +++++++++++++++++++++++++-
1 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c
index 569faf1..156b449 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -999,6 +999,67 @@ void close_test_fds(void)
return *ptr;
}
+void test_pkey_alloc_free_attach_pkey0(int *ptr, u16 pkey)
+{
+ int i, err;
+ int max_nr_pkey_allocs;
+ int alloced_pkeys[NR_PKEYS];
+ int nr_alloced = 0;
+ int newpkey;
+ long size;
+
+ assert(pkey_last_malloc_record);
+ size = pkey_last_malloc_record->size;
+ /*
+ * This is a bit of a hack. But mprotect() requires
+ * huge-page-aligned sizes when operating on hugetlbfs.
+ * So, make sure that we use something that's a multiple
+ * of a huge page when we can.
+ */
+ if (size >= HPAGE_SIZE)
+ size = HPAGE_SIZE;
+
+
+ /* allocate every possible key and make sure key-0 never got allocated */
+ max_nr_pkey_allocs = NR_PKEYS;
+ for (i = 0; i < max_nr_pkey_allocs; i++) {
+ int new_pkey = alloc_pkey();
+ assert(new_pkey != 0);
+
+ if (new_pkey < 0)
+ break;
+ alloced_pkeys[nr_alloced++] = new_pkey;
+ }
+ /* free all the allocated keys */
+ for (i = 0; i < nr_alloced; i++) {
+ int free_ret;
+
+ if (!alloced_pkeys[i])
+ continue;
+ free_ret = sys_pkey_free(alloced_pkeys[i]);
+ pkey_assert(!free_ret);
+ }
+
+ /* attach key-0 in various modes */
+ err = sys_mprotect_pkey(ptr, size, PROT_READ, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_WRITE, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_EXEC, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_READ|PROT_WRITE, 0);
+ pkey_assert(!err);
+ err = sys_mprotect_pkey(ptr, size, PROT_READ|PROT_WRITE|PROT_EXEC, 0);
+ pkey_assert(!err);
+
+ /* free key-0 */
+ err = sys_pkey_free(0);
+ pkey_assert(!err);
+
+ newpkey = sys_pkey_alloc(0, 0x0);
+ assert(newpkey == 0);
+}
+
void test_read_of_write_disabled_region(int *ptr, u16 pkey)
{
int ptr_contents;
@@ -1144,10 +1205,10 @@ void test_kernel_gup_write_to_write_disabled_region(int *ptr, u16 pkey)
void test_pkey_syscalls_on_non_allocated_pkey(int *ptr, u16 pkey)
{
int err;
- int i = get_start_key();
+ int i;
/* Note: 0 is the default pkey, so don't mess with it */
- for (; i < NR_PKEYS; i++) {
+ for (i=1; i < NR_PKEYS; i++) {
if (pkey == i)
continue;
@@ -1455,6 +1516,7 @@ void test_mprotect_pkey_on_unsupported_cpu(int *ptr, u16 pkey)
test_pkey_syscalls_on_non_allocated_pkey,
test_pkey_syscalls_bad_args,
test_pkey_alloc_exhaust,
+ test_pkey_alloc_free_attach_pkey0,
};
void run_tests_once(void)
--
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2018-07-17 13:49 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-17 13:49 [PATCH v14 00/22] selftests, powerpc, x86 : Memory Protection Keys linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 01/22] selftests/x86: Move protecton key selftest to arch neutral directory linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:25 ` dave.hansen
2018-07-18 15:25 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 02/22] selftests/vm: rename all references to pkru to a generic name linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 03/22] selftests/vm: move generic definitions to header file linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:26 ` dave.hansen
2018-07-18 15:26 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 04/22] selftests/vm: move arch-specific definitions to arch-specific header linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:27 ` dave.hansen
2018-07-18 15:27 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 05/22] selftests/vm: Make gcc check arguments of sigsafe_printf() linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 06/22] selftests/vm: typecast the pkey register linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:32 ` dave.hansen
2018-07-18 15:32 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 07/22] selftests/vm: generic function to handle shadow key register linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:34 ` dave.hansen
2018-07-18 15:34 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 08/22] selftests/vm: fix the wrong assert in pkey_disable_set() linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:36 ` dave.hansen
2018-07-18 15:36 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 09/22] selftests/vm: fixed bugs in pkey_disable_clear() linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:43 ` dave.hansen
2018-07-18 15:43 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 10/22] selftests/vm: fix alloc_random_pkey() to make it really random linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:45 ` dave.hansen
2018-07-18 15:45 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 11/22] selftests/vm: introduce two arch independent abstraction linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 15:52 ` dave.hansen
2018-07-18 15:52 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 12/22] selftests/vm: pkey register should match shadow pkey linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:00 ` dave.hansen
2018-07-18 16:00 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 13/22] selftests/vm: generic cleanup linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:06 ` dave.hansen
2018-07-18 16:06 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 14/22] selftests/vm: Introduce generic abstractions linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:38 ` dave.hansen
2018-07-18 16:38 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 15/22] selftests/vm: powerpc implementation to check support for pkey linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:42 ` dave.hansen
2018-07-18 16:42 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 16/22] selftests/vm: fix an assertion in test_pkey_alloc_exhaust() linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:52 ` dave.hansen
2018-07-18 16:52 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 17/22] selftests/vm: associate key on a mapped page and detect access violation linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 18/22] selftests/vm: associate key on a mapped page and detect write violation linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 19/22] selftests/vm: detect write violation on a mapped access-denied-key page linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` [PATCH v14 20/22] selftests/vm: testcases must restore pkey-permissions linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-18 16:56 ` dave.hansen
2018-07-18 16:56 ` Dave Hansen
2018-07-17 13:49 ` [PATCH v14 21/22] selftests/vm: sub-page allocator linuxram
2018-07-17 13:49 ` Ram Pai
2018-07-17 13:49 ` linuxram [this message]
2018-07-17 13:49 ` [PATCH v14 22/22] selftests/vm: test correct behavior of pkey-0 Ram Pai
2018-07-18 17:03 ` dave.hansen
2018-07-18 17:03 ` Dave Hansen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1531835365-32387-23-git-send-email-linuxram@us.ibm.com \
--to=linux-kselftest@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox