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 24/25] powerpc/ptrace: Add memory protection key regset
Date: Fri, 8 Sep 2017 15:45:12 -0700 [thread overview]
Message-ID: <1504910713-7094-33-git-send-email-linuxram@us.ibm.com> (raw)
In-Reply-To: <1504910713-7094-1-git-send-email-linuxram@us.ibm.com>
From: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
The AMR/IAMR/UAMOR are part of the program context.
Allow it to be accessed via ptrace and through core files.
Signed-off-by: Ram Pai <linuxram@us.ibm.com>
Signed-off-by: Thiago Jung Bauermann <bauerman@linux.vnet.ibm.com>
---
arch/powerpc/include/asm/pkeys.h | 5 +++
arch/powerpc/include/uapi/asm/elf.h | 1 +
arch/powerpc/kernel/ptrace.c | 66 +++++++++++++++++++++++++++++++++++
include/uapi/linux/elf.h | 1 +
4 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/include/asm/pkeys.h b/arch/powerpc/include/asm/pkeys.h
index 50522a0..a0111de 100644
--- a/arch/powerpc/include/asm/pkeys.h
+++ b/arch/powerpc/include/asm/pkeys.h
@@ -209,6 +209,11 @@ static inline int arch_set_user_pkey_access(struct task_struct *tsk, int pkey,
return __arch_set_user_pkey_access(tsk, pkey, init_val);
}
+static inline bool arch_pkeys_enabled(void)
+{
+ return pkey_inited;
+}
+
static inline void pkey_mm_init(struct mm_struct *mm)
{
if (!pkey_inited)
diff --git a/arch/powerpc/include/uapi/asm/elf.h b/arch/powerpc/include/uapi/asm/elf.h
index b2c6fdd..923e6d5 100644
--- a/arch/powerpc/include/uapi/asm/elf.h
+++ b/arch/powerpc/include/uapi/asm/elf.h
@@ -96,6 +96,7 @@
#define ELF_NTMSPRREG 3 /* include tfhar, tfiar, texasr */
#define ELF_NEBB 3 /* includes ebbrr, ebbhr, bescr */
#define ELF_NPMU 5 /* includes siar, sdar, sier, mmcr2, mmcr0 */
+#define ELF_NPKEY 3 /* includes amr, iamr, uamor */
typedef unsigned long elf_greg_t64;
typedef elf_greg_t64 elf_gregset_t64[ELF_NGREG];
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 07cd22e..6a9d3ec 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -39,6 +39,7 @@
#include <asm/pgtable.h>
#include <asm/switch_to.h>
#include <asm/tm.h>
+#include <asm/pkeys.h>
#include <asm/asm-prototypes.h>
#define CREATE_TRACE_POINTS
@@ -1775,6 +1776,61 @@ static int pmu_set(struct task_struct *target,
return ret;
}
#endif
+
+#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
+static int pkey_active(struct task_struct *target,
+ const struct user_regset *regset)
+{
+ if (!arch_pkeys_enabled())
+ return -ENODEV;
+
+ return regset->n;
+}
+
+static int pkey_get(struct task_struct *target,
+ const struct user_regset *regset,
+ unsigned int pos, unsigned int count,
+ void *kbuf, void __user *ubuf)
+{
+ BUILD_BUG_ON(TSO(amr) + sizeof(unsigned long) != TSO(iamr));
+ BUILD_BUG_ON(TSO(iamr) + sizeof(unsigned long) != TSO(uamor));
+
+ if (!arch_pkeys_enabled())
+ return -ENODEV;
+
+ return user_regset_copyout(&pos, &count, &kbuf, &ubuf,
+ &target->thread.amr, 0,
+ ELF_NPKEY * sizeof(unsigned long));
+}
+
+static int pkey_set(struct task_struct *target,
+ const struct user_regset *regset,
+ unsigned int pos, unsigned int count,
+ const void *kbuf, const void __user *ubuf)
+{
+ u64 new_amr;
+ int ret;
+
+ if (!arch_pkeys_enabled())
+ return -ENODEV;
+
+ /* Only the AMR can be set from userspace */
+ if (pos != 0 || count != sizeof(new_amr))
+ return -EINVAL;
+
+ ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
+ &new_amr, 0, sizeof(new_amr));
+ if (ret)
+ return ret;
+
+ /* UAMOR determines which bits of the AMR can be set from userspace. */
+ target->thread.amr = (new_amr & target->thread.uamor) |
+ (target->thread.amr & ~target->thread.uamor);
+
+ return 0;
+}
+#endif /* CONFIG_PPC64_MEMORY_PROTECTION_KEYS */
+
/*
* These are our native regset flavors.
*/
@@ -1809,6 +1865,9 @@ enum powerpc_regset {
REGSET_EBB, /* EBB registers */
REGSET_PMR, /* Performance Monitor Registers */
#endif
+#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
+ REGSET_PKEY, /* AMR register */
+#endif
};
static const struct user_regset native_regsets[] = {
@@ -1914,6 +1973,13 @@ enum powerpc_regset {
.active = pmu_active, .get = pmu_get, .set = pmu_set
},
#endif
+#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
+ [REGSET_PKEY] = {
+ .core_note_type = NT_PPC_PKEY, .n = ELF_NPKEY,
+ .size = sizeof(u64), .align = sizeof(u64),
+ .active = pkey_active, .get = pkey_get, .set = pkey_set
+ },
+#endif
};
static const struct user_regset_view user_ppc_native_view = {
diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
index b5280db..0708516 100644
--- a/include/uapi/linux/elf.h
+++ b/include/uapi/linux/elf.h
@@ -395,6 +395,7 @@
#define NT_PPC_TM_CTAR 0x10d /* TM checkpointed Target Address Register */
#define NT_PPC_TM_CPPR 0x10e /* TM checkpointed Program Priority Register */
#define NT_PPC_TM_CDSCR 0x10f /* TM checkpointed Data Stream Control Register */
+#define NT_PPC_PKEY 0x110 /* Memory Protection Keys registers */
#define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */
#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */
#define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */
--
1.7.1
next prev parent reply other threads:[~2017-09-08 22:47 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 ` [PATCH 07/25] powerpc: implementation for arch_set_user_pkey_access() Ram Pai
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 ` Ram Pai [this message]
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-33-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.