From: linuxram at us.ibm.com (Ram Pai)
Subject: [PATCH v14 21/22] selftests/vm: sub-page allocator
Date: Tue, 17 Jul 2018 06:49:24 -0700 [thread overview]
Message-ID: <1531835365-32387-22-git-send-email-linuxram@us.ibm.com> (raw)
In-Reply-To: <1531835365-32387-1-git-send-email-linuxram@us.ibm.com>
introduce a new allocator that allocates 4k hardware-pages to back
64k linux-page. This allocator is only applicable on powerpc.
cc: Dave Hansen <dave.hansen at intel.com>
cc: Florian Weimer <fweimer at redhat.com>
Signed-off-by: Ram Pai <linuxram at us.ibm.com>
Signed-off-by: Thiago Jung Bauermann <bauerman at linux.ibm.com>
---
tools/testing/selftests/vm/pkey-helpers.h | 6 ++++++
tools/testing/selftests/vm/pkey-powerpc.h | 25 +++++++++++++++++++++++++
tools/testing/selftests/vm/pkey-x86.h | 5 +++++
tools/testing/selftests/vm/protection_keys.c | 1 +
4 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/tools/testing/selftests/vm/pkey-helpers.h b/tools/testing/selftests/vm/pkey-helpers.h
index 288ccff..a00eee6 100644
--- a/tools/testing/selftests/vm/pkey-helpers.h
+++ b/tools/testing/selftests/vm/pkey-helpers.h
@@ -28,6 +28,9 @@
extern int dprint_in_signal;
extern char dprint_in_signal_buffer[DPRINT_IN_SIGNAL_BUF_SIZE];
+extern int test_nr;
+extern int iteration_nr;
+
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
@@ -78,6 +81,9 @@ static inline void sigsafe_printf(const char *format, ...)
void expected_pkey_fault(int pkey);
int sys_pkey_alloc(unsigned long flags, u64 init_val);
int sys_pkey_free(unsigned long pkey);
+int mprotect_pkey(void *ptr, size_t size, unsigned long orig_prot,
+ unsigned long pkey);
+void record_pkey_malloc(void *ptr, long size, int prot);
#if defined(__i386__) || defined(__x86_64__) /* arch */
#include "pkey-x86.h"
diff --git a/tools/testing/selftests/vm/pkey-powerpc.h b/tools/testing/selftests/vm/pkey-powerpc.h
index b649e85..ab60f74 100644
--- a/tools/testing/selftests/vm/pkey-powerpc.h
+++ b/tools/testing/selftests/vm/pkey-powerpc.h
@@ -100,4 +100,29 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
/* 8-bytes of instruction * 16384bytes = 1 page */
#define __page_o_noops() asm(".rept 16384 ; nop; .endr")
+void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
+{
+ void *ptr;
+ int ret;
+
+ dprintf1("doing %s(size=%ld, prot=0x%x, pkey=%d)\n", __func__,
+ size, prot, pkey);
+ pkey_assert(pkey < NR_PKEYS);
+ ptr = mmap(NULL, size, prot, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+ pkey_assert(ptr != (void *)-1);
+
+ ret = syscall(__NR_subpage_prot, ptr, size, NULL);
+ if (ret) {
+ perror("subpage_perm");
+ return PTR_ERR_ENOTSUP;
+ }
+
+ ret = mprotect_pkey((void *)ptr, PAGE_SIZE, prot, pkey);
+ pkey_assert(!ret);
+ record_pkey_malloc(ptr, size, prot);
+
+ dprintf1("%s() for pkey %d @ %p\n", __func__, pkey, ptr);
+ return ptr;
+}
+
#endif /* _PKEYS_POWERPC_H */
diff --git a/tools/testing/selftests/vm/pkey-x86.h b/tools/testing/selftests/vm/pkey-x86.h
index 887acf2..a7e4648 100644
--- a/tools/testing/selftests/vm/pkey-x86.h
+++ b/tools/testing/selftests/vm/pkey-x86.h
@@ -176,4 +176,9 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
expected_pkey_fault(pkey);
}
+void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
+{
+ return PTR_ERR_ENOTSUP;
+}
+
#endif /* _PKEYS_X86_H */
diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c
index ea3cf04..569faf1 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -883,6 +883,7 @@ void setup_hugetlbfs(void)
void *(*pkey_malloc[])(long size, int prot, u16 pkey) = {
malloc_pkey_with_mprotect,
+ malloc_pkey_with_mprotect_subpage,
malloc_pkey_anon_huge,
malloc_pkey_hugetlb
/* can not do direct with the pkey_mprotect() API:
--
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 21/22] selftests/vm: sub-page allocator
Date: Tue, 17 Jul 2018 06:49:24 -0700 [thread overview]
Message-ID: <1531835365-32387-22-git-send-email-linuxram@us.ibm.com> (raw)
Message-ID: <20180717134924.F03kCHjTglT233wSFSYdeDHuwFBvJPv0caG7-3AEASI@z> (raw)
In-Reply-To: <1531835365-32387-1-git-send-email-linuxram@us.ibm.com>
introduce a new allocator that allocates 4k hardware-pages to back
64k linux-page. This allocator is only applicable on powerpc.
cc: Dave Hansen <dave.hansen at intel.com>
cc: Florian Weimer <fweimer at redhat.com>
Signed-off-by: Ram Pai <linuxram at us.ibm.com>
Signed-off-by: Thiago Jung Bauermann <bauerman at linux.ibm.com>
---
tools/testing/selftests/vm/pkey-helpers.h | 6 ++++++
tools/testing/selftests/vm/pkey-powerpc.h | 25 +++++++++++++++++++++++++
tools/testing/selftests/vm/pkey-x86.h | 5 +++++
tools/testing/selftests/vm/protection_keys.c | 1 +
4 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/tools/testing/selftests/vm/pkey-helpers.h b/tools/testing/selftests/vm/pkey-helpers.h
index 288ccff..a00eee6 100644
--- a/tools/testing/selftests/vm/pkey-helpers.h
+++ b/tools/testing/selftests/vm/pkey-helpers.h
@@ -28,6 +28,9 @@
extern int dprint_in_signal;
extern char dprint_in_signal_buffer[DPRINT_IN_SIGNAL_BUF_SIZE];
+extern int test_nr;
+extern int iteration_nr;
+
#ifdef __GNUC__
__attribute__((format(printf, 1, 2)))
#endif
@@ -78,6 +81,9 @@ static inline void sigsafe_printf(const char *format, ...)
void expected_pkey_fault(int pkey);
int sys_pkey_alloc(unsigned long flags, u64 init_val);
int sys_pkey_free(unsigned long pkey);
+int mprotect_pkey(void *ptr, size_t size, unsigned long orig_prot,
+ unsigned long pkey);
+void record_pkey_malloc(void *ptr, long size, int prot);
#if defined(__i386__) || defined(__x86_64__) /* arch */
#include "pkey-x86.h"
diff --git a/tools/testing/selftests/vm/pkey-powerpc.h b/tools/testing/selftests/vm/pkey-powerpc.h
index b649e85..ab60f74 100644
--- a/tools/testing/selftests/vm/pkey-powerpc.h
+++ b/tools/testing/selftests/vm/pkey-powerpc.h
@@ -100,4 +100,29 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
/* 8-bytes of instruction * 16384bytes = 1 page */
#define __page_o_noops() asm(".rept 16384 ; nop; .endr")
+void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
+{
+ void *ptr;
+ int ret;
+
+ dprintf1("doing %s(size=%ld, prot=0x%x, pkey=%d)\n", __func__,
+ size, prot, pkey);
+ pkey_assert(pkey < NR_PKEYS);
+ ptr = mmap(NULL, size, prot, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+ pkey_assert(ptr != (void *)-1);
+
+ ret = syscall(__NR_subpage_prot, ptr, size, NULL);
+ if (ret) {
+ perror("subpage_perm");
+ return PTR_ERR_ENOTSUP;
+ }
+
+ ret = mprotect_pkey((void *)ptr, PAGE_SIZE, prot, pkey);
+ pkey_assert(!ret);
+ record_pkey_malloc(ptr, size, prot);
+
+ dprintf1("%s() for pkey %d @ %p\n", __func__, pkey, ptr);
+ return ptr;
+}
+
#endif /* _PKEYS_POWERPC_H */
diff --git a/tools/testing/selftests/vm/pkey-x86.h b/tools/testing/selftests/vm/pkey-x86.h
index 887acf2..a7e4648 100644
--- a/tools/testing/selftests/vm/pkey-x86.h
+++ b/tools/testing/selftests/vm/pkey-x86.h
@@ -176,4 +176,9 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
expected_pkey_fault(pkey);
}
+void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
+{
+ return PTR_ERR_ENOTSUP;
+}
+
#endif /* _PKEYS_X86_H */
diff --git a/tools/testing/selftests/vm/protection_keys.c b/tools/testing/selftests/vm/protection_keys.c
index ea3cf04..569faf1 100644
--- a/tools/testing/selftests/vm/protection_keys.c
+++ b/tools/testing/selftests/vm/protection_keys.c
@@ -883,6 +883,7 @@ void setup_hugetlbfs(void)
void *(*pkey_malloc[])(long size, int prot, u16 pkey) = {
malloc_pkey_with_mprotect,
+ malloc_pkey_with_mprotect_subpage,
malloc_pkey_anon_huge,
malloc_pkey_hugetlb
/* can not do direct with the pkey_mprotect() API:
--
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 ` linuxram [this message]
2018-07-17 13:49 ` [PATCH v14 21/22] selftests/vm: sub-page allocator Ram Pai
2018-07-17 13:49 ` [PATCH v14 22/22] selftests/vm: test correct behavior of pkey-0 linuxram
2018-07-17 13:49 ` 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-22-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