From: Sandipan Das <sandipan@linux.ibm.com> To: shuahkh@osg.samsung.com, linux-kselftest@vger.kernel.org Cc: linux-arch@vger.kernel.org, fweimer@redhat.com, dave.hansen@intel.com, x86@kernel.org, linuxram@us.ibm.com, mhocko@kernel.org, linux-mm@kvack.org, mingo@redhat.com, aneesh.kumar@linux.ibm.com, bauerman@linux.ibm.com, msuchanek@suse.de, linuxppc-dev@lists.ozlabs.org Subject: [PATCH v15 19/23] selftests/vm/pkeys: Introduce a sub-page allocator Date: Wed, 18 Dec 2019 13:21:52 +0530 [thread overview] Message-ID: <299a88ab295be71c4394d42787e41a8bc74f5542.1576645161.git.sandipan@linux.ibm.com> (raw) In-Reply-To: <cover.1576645161.git.sandipan@linux.ibm.com> In-Reply-To: <cover.1576645161.git.sandipan@linux.ibm.com> From: Ram Pai <linuxram@us.ibm.com> This introduces a new allocator that allocates 4K hardware pages to back 64K linux pages. This allocator is available only on powerpc. cc: Dave Hansen <dave.hansen@intel.com> cc: Florian Weimer <fweimer@redhat.com> Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> Signed-off-by: Sandipan Das <sandipan@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(+) diff --git a/tools/testing/selftests/vm/pkey-helpers.h b/tools/testing/selftests/vm/pkey-helpers.h index 43299435f24c..6a03faf1ef44 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 @@ __attribute__((noinline)) int read_ptr(int *ptr); void expected_pkey_fault(int pkey); int sys_pkey_alloc(unsigned long flags, unsigned long 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 a43d7be85a27..f7a20bd07870 100644 --- a/tools/testing/selftests/vm/pkey-powerpc.h +++ b/tools/testing/selftests/vm/pkey-powerpc.h @@ -91,4 +91,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 e5fdee39a7d8..87b85f60b43f 100644 --- a/tools/testing/selftests/vm/pkey-x86.h +++ b/tools/testing/selftests/vm/pkey-x86.h @@ -175,4 +175,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 176625ded549..5faf52ba7b8f 100644 --- a/tools/testing/selftests/vm/protection_keys.c +++ b/tools/testing/selftests/vm/protection_keys.c @@ -844,6 +844,7 @@ void *malloc_pkey_mmap_dax(long size, int prot, u16 pkey) 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: -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Sandipan Das <sandipan@linux.ibm.com> To: shuahkh@osg.samsung.com, linux-kselftest@vger.kernel.org Cc: linux-arch@vger.kernel.org, fweimer@redhat.com, linux-mm@kvack.org, aneesh.kumar@linux.ibm.com, x86@kernel.org, linuxram@us.ibm.com, mhocko@kernel.org, dave.hansen@intel.com, mingo@redhat.com, msuchanek@suse.de, linuxppc-dev@lists.ozlabs.org, bauerman@linux.ibm.com Subject: [PATCH v15 19/23] selftests/vm/pkeys: Introduce a sub-page allocator Date: Wed, 18 Dec 2019 13:21:52 +0530 [thread overview] Message-ID: <299a88ab295be71c4394d42787e41a8bc74f5542.1576645161.git.sandipan@linux.ibm.com> (raw) In-Reply-To: <cover.1576645161.git.sandipan@linux.ibm.com> In-Reply-To: <cover.1576645161.git.sandipan@linux.ibm.com> From: Ram Pai <linuxram@us.ibm.com> This introduces a new allocator that allocates 4K hardware pages to back 64K linux pages. This allocator is available only on powerpc. cc: Dave Hansen <dave.hansen@intel.com> cc: Florian Weimer <fweimer@redhat.com> Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> Signed-off-by: Sandipan Das <sandipan@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(+) diff --git a/tools/testing/selftests/vm/pkey-helpers.h b/tools/testing/selftests/vm/pkey-helpers.h index 43299435f24c..6a03faf1ef44 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 @@ __attribute__((noinline)) int read_ptr(int *ptr); void expected_pkey_fault(int pkey); int sys_pkey_alloc(unsigned long flags, unsigned long 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 a43d7be85a27..f7a20bd07870 100644 --- a/tools/testing/selftests/vm/pkey-powerpc.h +++ b/tools/testing/selftests/vm/pkey-powerpc.h @@ -91,4 +91,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 e5fdee39a7d8..87b85f60b43f 100644 --- a/tools/testing/selftests/vm/pkey-x86.h +++ b/tools/testing/selftests/vm/pkey-x86.h @@ -175,4 +175,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 176625ded549..5faf52ba7b8f 100644 --- a/tools/testing/selftests/vm/protection_keys.c +++ b/tools/testing/selftests/vm/protection_keys.c @@ -844,6 +844,7 @@ void *malloc_pkey_mmap_dax(long size, int prot, u16 pkey) 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: -- 2.17.1
next prev parent reply other threads:[~2019-12-18 7:52 UTC|newest] Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-18 7:51 [PATCH v15 00/24] selftests, powerpc, x86: Memory Protection Keys Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 01/23] selftests/x86/pkeys: Move selftests to arch-neutral directory Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 02/23] selftests/vm/pkeys: Rename all references to pkru to a generic name Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 03/23] selftests/vm/pkeys: Move generic definitions to header file Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 04/23] selftests/vm/pkeys: Move some definitions to arch-specific header Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 05/23] selftests/vm/pkeys: Make gcc check arguments of sigsafe_printf() Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 06/23] selftests/vm/pkeys: Typecast the pkey register Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 20:46 ` Dave Hansen 2019-12-18 20:46 ` Dave Hansen 2019-12-18 20:59 ` Michal Suchánek 2019-12-18 20:59 ` Michal Suchánek 2019-12-18 21:01 ` Dave Hansen 2019-12-18 21:01 ` Dave Hansen 2019-12-18 21:45 ` Michal Suchánek 2019-12-18 21:45 ` Michal Suchánek 2019-12-19 11:39 ` Michael Ellerman 2019-12-18 7:51 ` [PATCH v15 07/23] selftests: vm: pkeys: Add helpers for pkey bits Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 08/23] selftests/vm/pkeys: Fix pkey_disable_clear() Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 09/23] selftests/vm/pkeys: Fix assertion in pkey_disable_set/clear() Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 10/23] selftests/vm/pkeys: Fix alloc_random_pkey() to make it really random Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 11/23] selftests: vm: pkeys: Use the correct huge page size Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 12/23] selftests/vm/pkeys: Introduce generic pkey abstractions Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 13/23] selftests/vm/pkeys: Introduce powerpc support Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 14/23] selftests/vm/pkeys: Fix assertion in test_pkey_alloc_exhaust() Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2020-01-15 7:30 ` Michael Ellerman 2020-01-15 7:30 ` Michael Ellerman 2019-12-18 7:51 ` [PATCH v15 15/23] selftests/vm/pkeys: Improve checks to determine pkey support Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 16/23] selftests/vm/pkeys: Associate key on a mapped page and detect access violation Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 17/23] selftests/vm/pkeys: Associate key on a mapped page and detect write violation Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 18/23] selftests/vm/pkeys: Detect write violation on a mapped access-denied-key page Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` Sandipan Das [this message] 2019-12-18 7:51 ` [PATCH v15 19/23] selftests/vm/pkeys: Introduce a sub-page allocator Sandipan Das 2019-12-18 7:51 ` [PATCH v15 20/23] selftests/vm/pkeys: Test correct behaviour of pkey-0 Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 21/23] selftests/vm/pkeys: Fix number of reserved powerpc pkeys Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 22/23] selftests/vm/pkeys: Override access right definitions on powerpc Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2019-12-18 7:51 ` [PATCH v15 23/23] selftests: vm: pkeys: Use the correct page size " Sandipan Das 2019-12-18 7:51 ` Sandipan Das 2020-01-15 7:07 ` Michael Ellerman 2020-01-15 7:07 ` Michael Ellerman 2020-01-16 8:33 ` Sandipan Das 2020-01-16 8:33 ` Sandipan Das 2019-12-18 20:48 ` [PATCH v15 00/24] selftests, powerpc, x86: Memory Protection Keys Dave Hansen 2019-12-18 20:48 ` Dave Hansen 2020-01-10 17:38 ` Aneesh Kumar K.V 2020-01-10 17:38 ` Aneesh Kumar K.V 2020-01-10 17:57 ` Dave Hansen 2020-01-10 17:57 ` Dave Hansen 2020-01-11 16:50 ` Sandipan Das 2020-01-11 16:50 ` Sandipan Das
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=299a88ab295be71c4394d42787e41a8bc74f5542.1576645161.git.sandipan@linux.ibm.com \ --to=sandipan@linux.ibm.com \ --cc=aneesh.kumar@linux.ibm.com \ --cc=bauerman@linux.ibm.com \ --cc=dave.hansen@intel.com \ --cc=fweimer@redhat.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kselftest@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=linuxram@us.ibm.com \ --cc=mhocko@kernel.org \ --cc=mingo@redhat.com \ --cc=msuchanek@suse.de \ --cc=shuahkh@osg.samsung.com \ --cc=x86@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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.