From: Ram Pai <linuxram@us.ibm.com>
To: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org
Cc: benh@kernel.crashing.org, paulus@samba.org,
khandual@linux.vnet.ibm.com, aneesh.kumar@linux.vnet.ibm.com,
bsingharora@gmail.com, hbabu@us.ibm.com, mhocko@kernel.org,
bauerman@linux.vnet.ibm.com, ebiederm@xmission.com,
linuxram@us.ibm.com
Subject: [PATCH 07/25] powerpc: implementation for arch_set_user_pkey_access()
Date: Fri, 8 Sep 2017 15:44:55 -0700 [thread overview]
Message-ID: <1504910713-7094-16-git-send-email-linuxram@us.ibm.com> (raw)
In-Reply-To: <1504910713-7094-1-git-send-email-linuxram@us.ibm.com>
This patch provides the detailed implementation for
a user to allocate a key and enable it in the hardware.
It provides the plumbing, but it cannot be used till
the system call is implemented. The next patch will
do so.
Signed-off-by: Ram Pai <linuxram@us.ibm.com>
---
arch/powerpc/include/asm/pkeys.h | 9 ++++++++-
arch/powerpc/mm/pkeys.c | 28 ++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/include/asm/pkeys.h b/arch/powerpc/include/asm/pkeys.h
index 53bf13b..7fd48a4 100644
--- a/arch/powerpc/include/asm/pkeys.h
+++ b/arch/powerpc/include/asm/pkeys.h
@@ -24,6 +24,9 @@
#endif
#define arch_max_pkey() pkeys_total
+#define AMR_RD_BIT 0x1UL
+#define AMR_WR_BIT 0x2UL
+#define IAMR_EX_BIT 0x1UL
#define ARCH_VM_PKEY_FLAGS (VM_PKEY_BIT0 | VM_PKEY_BIT1 | VM_PKEY_BIT2 | \
VM_PKEY_BIT3 | VM_PKEY_BIT4)
#define AMR_BITS_PER_PKEY 2
@@ -123,10 +126,14 @@ static inline int arch_override_mprotect_pkey(struct vm_area_struct *vma,
return 0;
}
+extern int __arch_set_user_pkey_access(struct task_struct *tsk, int pkey,
+ unsigned long init_val);
static inline int arch_set_user_pkey_access(struct task_struct *tsk, int pkey,
unsigned long init_val)
{
- return 0;
+ if (!pkey_inited)
+ return -EINVAL;
+ return __arch_set_user_pkey_access(tsk, pkey, init_val);
}
static inline void pkey_mm_init(struct mm_struct *mm)
diff --git a/arch/powerpc/mm/pkeys.c b/arch/powerpc/mm/pkeys.c
index 178aa33..cc5be6a 100644
--- a/arch/powerpc/mm/pkeys.c
+++ b/arch/powerpc/mm/pkeys.c
@@ -12,6 +12,7 @@
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*/
+#include <asm/mman.h>
#include <linux/pkeys.h> /* PKEY_* */
bool pkey_inited;
@@ -63,6 +64,11 @@ void __init pkey_initialize(void)
#define PKEY_REG_BITS (sizeof(u64)*8)
#define pkeyshift(pkey) (PKEY_REG_BITS - ((pkey+1) * AMR_BITS_PER_PKEY))
+static bool is_pkey_enabled(int pkey)
+{
+ return !!(read_uamor() & (0x3ul << pkeyshift(pkey)));
+}
+
static inline void init_amr(int pkey, u8 init_bits)
{
u64 new_amr_bits = (((u64)init_bits & 0x3UL) << pkeyshift(pkey));
@@ -105,3 +111,25 @@ void __arch_deactivate_pkey(int pkey)
{
pkey_status_change(pkey, false);
}
+
+/*
+ * set the access right in AMR IAMR and UAMOR register
+ * for @pkey to that specified in @init_val.
+ */
+int __arch_set_user_pkey_access(struct task_struct *tsk, int pkey,
+ unsigned long init_val)
+{
+ u64 new_amr_bits = 0x0ul;
+
+ if (!is_pkey_enabled(pkey))
+ return -EINVAL;
+
+ /* Set the bits we need in AMR: */
+ if (init_val & PKEY_DISABLE_ACCESS)
+ new_amr_bits |= AMR_RD_BIT | AMR_WR_BIT;
+ else if (init_val & PKEY_DISABLE_WRITE)
+ new_amr_bits |= AMR_WR_BIT;
+
+ init_amr(pkey, new_amr_bits);
+ return 0;
+}
--
1.7.1
next prev parent reply other threads:[~2017-09-08 22:46 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-08 22:44 [PATCH 0/7] powerpc: Free up RPAGE_RSV bits Ram Pai
2017-09-08 22:44 ` [PATCH 1/7] powerpc: introduce pte_set_hash_slot() helper Ram Pai
2017-09-13 7:55 ` Balbir Singh
2017-10-19 4:52 ` Michael Ellerman
2017-09-08 22:44 ` [PATCH 2/7] powerpc: introduce pte_get_hash_gslot() helper Ram Pai
2017-09-13 9:32 ` Balbir Singh
2017-09-13 20:10 ` Ram Pai
2017-09-08 22:44 ` [PATCH 3/7] powerpc: Free up four 64K PTE bits in 4K backed HPTE pages Ram Pai
2017-09-14 1:18 ` Balbir Singh
2017-10-19 3:25 ` Michael Ellerman
2017-10-19 17:02 ` Ram Pai
2017-10-23 8:47 ` Aneesh Kumar K.V
2017-10-23 16:29 ` Ram Pai
2017-10-25 9:18 ` Michael Ellerman
2017-10-26 6:08 ` Ram Pai
2017-09-08 22:44 ` [PATCH 4/7] powerpc: Free up four 64K PTE bits in 64K " Ram Pai
2017-09-14 1:44 ` Balbir Singh
2017-09-14 17:54 ` Ram Pai
2017-09-14 18:25 ` Ram Pai
2017-09-14 8:13 ` Benjamin Herrenschmidt
2017-10-23 8:52 ` Aneesh Kumar K.V
2017-10-23 23:42 ` Ram Pai
2017-10-23 19:22 ` Ram Pai
2017-10-24 3:37 ` Aneesh Kumar K.V
2017-09-08 22:44 ` [PATCH 5/7] powerpc: Swizzle around 4K PTE bits to free up bit 5 and bit 6 Ram Pai
2017-09-14 1:48 ` Balbir Singh
2017-09-14 17:23 ` Ram Pai
2017-09-08 22:44 ` [PATCH 6/7] powerpc: use helper functions to get and set hash slots Ram Pai
2017-09-08 22:44 ` [PATCH 7/7] powerpc: capture the PTE format changes in the dump pte report Ram Pai
2017-09-14 3:22 ` Balbir Singh
2017-09-14 17:19 ` Ram Pai
2017-09-08 22:44 ` [PATCH 00/25] powerpc: Memory Protection Keys Ram Pai
2017-09-08 22:44 ` [PATCH 01/25] powerpc: initial pkey plumbing Ram Pai
2017-09-14 3:32 ` Balbir Singh
2017-09-14 16:17 ` Ram Pai
2017-10-19 4:20 ` Michael Ellerman
2017-10-19 17:11 ` Ram Pai
2017-10-24 8:17 ` Michael Ellerman
2017-09-08 22:44 ` [PATCH 02/25] powerpc: define an additional vma bit for protection keys Ram Pai
2017-09-14 4:38 ` Balbir Singh
2017-09-14 8:11 ` Benjamin Herrenschmidt
2017-10-23 21:06 ` Ram Pai
2017-09-14 16:15 ` Ram Pai
2017-10-23 9:25 ` Aneesh Kumar K.V
2017-10-23 9:28 ` Aneesh Kumar K.V
2017-10-23 17:57 ` Ram Pai
2017-10-23 17:43 ` Ram Pai
2017-09-08 22:44 ` [PATCH 03/25] powerpc: track allocation status of all pkeys Ram Pai
2017-10-07 10:02 ` Michael Ellerman
2017-10-08 23:02 ` Ram Pai
2017-10-18 2:47 ` Balbir Singh
2017-10-23 9:41 ` Aneesh Kumar K.V
2017-10-23 18:14 ` Ram Pai
2017-10-24 6:28 ` Aneesh Kumar K.V
2017-10-24 7:23 ` Ram Pai
2017-09-08 22:44 ` [PATCH 04/25] powerpc: helper function to read, write AMR, IAMR, UAMOR registers Ram Pai
2017-10-18 3:17 ` [PATCH 04/25] powerpc: helper function to read,write AMR,IAMR,UAMOR registers Balbir Singh
2017-10-18 3:42 ` Ram Pai
2017-09-08 22:44 ` [PATCH 05/25] powerpc: helper functions to initialize AMR, IAMR and UAMOR registers Ram Pai
2017-10-18 3:24 ` Balbir Singh
2017-10-18 20:38 ` Ram Pai
2017-10-24 6:25 ` Aneesh Kumar K.V
2017-10-24 7:04 ` Ram Pai
2017-10-24 8:29 ` Michael Ellerman
2017-09-08 22:44 ` [PATCH 06/25] powerpc: cleaup AMR, iAMR when a key is allocated or freed Ram Pai
2017-10-18 3:34 ` [PATCH 06/25] powerpc: cleaup AMR,iAMR " Balbir Singh
2017-10-23 9:43 ` [PATCH 06/25] powerpc: cleaup AMR, iAMR " Aneesh Kumar K.V
2017-10-23 18:36 ` [PATCH 06/25] powerpc: cleaup AMR,iAMR " Ram Pai
2017-10-23 9:43 ` [PATCH 06/25] powerpc: cleaup AMR, iAMR " Aneesh Kumar K.V
2017-10-23 18:29 ` [PATCH 06/25] powerpc: cleaup AMR,iAMR " Ram Pai
2017-09-08 22:44 ` Ram Pai [this message]
2017-09-08 22:44 ` [PATCH 08/25] powerpc: sys_pkey_alloc() and sys_pkey_free() system calls Ram Pai
2017-10-24 15:48 ` Michael Ellerman
2017-10-24 18:34 ` Ram Pai
2017-10-25 9:26 ` Michael Ellerman
2017-09-08 22:44 ` [PATCH 09/25] powerpc: ability to create execute-disabled pkeys Ram Pai
2017-10-18 3:42 ` Balbir Singh
2017-10-18 5:15 ` Ram Pai
2017-10-24 6:58 ` Aneesh Kumar K.V
2017-10-24 7:20 ` Ram Pai
2017-10-24 4:36 ` Aneesh Kumar K.V
2017-10-28 23:18 ` Ram Pai
2017-09-08 22:44 ` [PATCH 10/25] powerpc: store and restore the pkey state across context switches Ram Pai
2017-10-18 3:49 ` Balbir Singh
2017-10-18 20:47 ` Ram Pai
2017-10-18 23:00 ` Balbir Singh
2017-10-19 0:52 ` Ram Pai
2017-09-08 22:44 ` [PATCH 11/25] powerpc: introduce execute-only pkey Ram Pai
2017-10-18 4:15 ` Balbir Singh
2017-10-18 20:57 ` Ram Pai
2017-10-18 23:02 ` Balbir Singh
2017-10-19 15:52 ` Ram Pai
2017-09-08 22:45 ` [PATCH 12/25] powerpc: ability to associate pkey to a vma Ram Pai
2017-10-18 4:27 ` Balbir Singh
2017-10-18 21:01 ` Ram Pai
2017-09-08 22:45 ` [PATCH 13/25] powerpc: implementation for arch_override_mprotect_pkey() Ram Pai
2017-10-18 4:36 ` Balbir Singh
2017-10-18 21:10 ` Ram Pai
2017-10-18 23:04 ` Balbir Singh
2017-10-19 16:39 ` Ram Pai
2017-09-08 22:45 ` [PATCH 14/25] powerpc: map vma key-protection bits to pte key bits Ram Pai
2017-10-18 4:39 ` Balbir Singh
2017-10-18 21:14 ` Ram Pai
2017-09-08 22:45 ` [PATCH 15/25] powerpc: sys_pkey_mprotect() system call Ram Pai
2017-09-08 22:45 ` [PATCH 16/25] powerpc: Program HPTE key protection bits Ram Pai
2017-10-18 4:43 ` Balbir Singh
2017-09-08 22:45 ` [PATCH 17/25] powerpc: helper to validate key-access permissions of a pte Ram Pai
2017-10-18 4:48 ` Balbir Singh
2017-10-18 21:19 ` Ram Pai
2017-09-08 22:45 ` [PATCH 18/25] powerpc: check key protection for user page access Ram Pai
2017-10-18 19:57 ` Balbir Singh
2017-10-18 21:29 ` Ram Pai
2017-10-18 23:08 ` Balbir Singh
2017-10-19 16:46 ` Ram Pai
2017-09-08 22:45 ` [PATCH 19/25] powerpc: implementation for arch_vma_access_permitted() Ram Pai
2017-10-18 23:20 ` Balbir Singh
2017-10-24 15:48 ` Michael Ellerman
2017-09-08 22:45 ` [PATCH 20/25] powerpc: Handle exceptions caused by pkey violation Ram Pai
2017-10-18 23:27 ` Balbir Singh
2017-10-19 16:53 ` Ram Pai
2017-10-24 15:47 ` Michael Ellerman
2017-10-24 18:26 ` Ram Pai
2017-10-29 14:03 ` Aneesh Kumar K.V
2017-10-30 0:37 ` Ram Pai
2017-09-08 22:45 ` [PATCH 21/25] powerpc: introduce get_pte_pkey() helper Ram Pai
2017-10-18 23:29 ` Balbir Singh
2017-10-19 16:55 ` Ram Pai
2017-09-08 22:45 ` [PATCH 22/25] powerpc: capture the violated protection key on fault Ram Pai
2017-10-24 15:46 ` Michael Ellerman
2017-09-08 22:45 ` [PATCH 23/25] powerpc: Deliver SEGV signal on pkey violation Ram Pai
2017-10-24 15:46 ` Michael Ellerman
2017-10-24 17:19 ` Ram Pai
2017-09-08 22:45 ` [PATCH 24/25] powerpc/ptrace: Add memory protection key regset Ram Pai
2017-09-08 22:45 ` [PATCH 25/25] powerpc: Enable pkey subsystem Ram Pai
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=1504910713-7094-16-git-send-email-linuxram@us.ibm.com \
--to=linuxram@us.ibm.com \
--cc=aneesh.kumar@linux.vnet.ibm.com \
--cc=bauerman@linux.vnet.ibm.com \
--cc=benh@kernel.crashing.org \
--cc=bsingharora@gmail.com \
--cc=ebiederm@xmission.com \
--cc=hbabu@us.ibm.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mhocko@kernel.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.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 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.