arm64: mte: ptrace: Add NT_ARM_TAGGED_ADDR_CTRL regset
This regset allows read/write access to a ptraced process prctl(PR_SET_TAGGED_ADDR_CTRL) setting. Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Alan Hayward <Alan.Hayward@arm.com> Cc: Luis Machado <luis.machado@linaro.org> Cc: Omair Javaid <omair.javaid@linaro.org>zero-sugar-mainline-defconfig
parent
18ddbaa02b
commit
2200aa7154
|
@ -1033,6 +1033,35 @@ static int pac_generic_keys_set(struct task_struct *target,
|
||||||
#endif /* CONFIG_CHECKPOINT_RESTORE */
|
#endif /* CONFIG_CHECKPOINT_RESTORE */
|
||||||
#endif /* CONFIG_ARM64_PTR_AUTH */
|
#endif /* CONFIG_ARM64_PTR_AUTH */
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
||||||
|
static int tagged_addr_ctrl_get(struct task_struct *target,
|
||||||
|
const struct user_regset *regset,
|
||||||
|
struct membuf to)
|
||||||
|
{
|
||||||
|
long ctrl = get_tagged_addr_ctrl(target);
|
||||||
|
|
||||||
|
if (IS_ERR_VALUE(ctrl))
|
||||||
|
return ctrl;
|
||||||
|
|
||||||
|
return membuf_write(&to, &ctrl, sizeof(ctrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tagged_addr_ctrl_set(struct task_struct *target, const struct
|
||||||
|
user_regset *regset, unsigned int pos,
|
||||||
|
unsigned int count, const void *kbuf, const
|
||||||
|
void __user *ubuf)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
long ctrl;
|
||||||
|
|
||||||
|
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &ctrl, 0, -1);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return set_tagged_addr_ctrl(target, ctrl);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
enum aarch64_regset {
|
enum aarch64_regset {
|
||||||
REGSET_GPR,
|
REGSET_GPR,
|
||||||
REGSET_FPR,
|
REGSET_FPR,
|
||||||
|
@ -1052,6 +1081,9 @@ enum aarch64_regset {
|
||||||
REGSET_PACG_KEYS,
|
REGSET_PACG_KEYS,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
||||||
|
REGSET_TAGGED_ADDR_CTRL,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct user_regset aarch64_regsets[] = {
|
static const struct user_regset aarch64_regsets[] = {
|
||||||
|
@ -1149,6 +1181,16 @@ static const struct user_regset aarch64_regsets[] = {
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
|
||||||
|
[REGSET_TAGGED_ADDR_CTRL] = {
|
||||||
|
.core_note_type = NT_ARM_TAGGED_ADDR_CTRL,
|
||||||
|
.n = 1,
|
||||||
|
.size = sizeof(long),
|
||||||
|
.align = sizeof(long),
|
||||||
|
.regset_get = tagged_addr_ctrl_get,
|
||||||
|
.set = tagged_addr_ctrl_set,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct user_regset_view user_aarch64_view = {
|
static const struct user_regset_view user_aarch64_view = {
|
||||||
|
|
|
@ -425,6 +425,7 @@ typedef struct elf64_shdr {
|
||||||
#define NT_ARM_PAC_MASK 0x406 /* ARM pointer authentication code masks */
|
#define NT_ARM_PAC_MASK 0x406 /* ARM pointer authentication code masks */
|
||||||
#define NT_ARM_PACA_KEYS 0x407 /* ARM pointer authentication address keys */
|
#define NT_ARM_PACA_KEYS 0x407 /* ARM pointer authentication address keys */
|
||||||
#define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication generic key */
|
#define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication generic key */
|
||||||
|
#define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* arm64 tagged address control (prctl()) */
|
||||||
#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */
|
#define NT_ARC_V2 0x600 /* ARCv2 accumulator/extra registers */
|
||||||
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note */
|
#define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note */
|
||||||
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers */
|
#define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers */
|
||||||
|
|
Loading…
Reference in New Issue