]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: ptrace: Use USER_REGSET_NOTE_TYPE() to specify regset note names
authorDave Martin <Dave.Martin@arm.com>
Tue, 1 Jul 2025 13:55:59 +0000 (14:55 +0100)
committerKees Cook <kees@kernel.org>
Tue, 15 Jul 2025 05:27:47 +0000 (22:27 -0700)
Instead of having the core code guess the note name for each regset,
use USER_REGSET_NOTE_TYPE() to pick the correct name from elf.h.

This does not affect the correctness of switch(note_type) and similar
code, since note type values known to Linux for coredump purposes were
already required to be unique.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Kees Cook <kees@kernel.org>
Cc: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: linux-arm-kernel@lists.infradead.org
Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Link: https://lore.kernel.org/r/20250701135616.29630-7-Dave.Martin@arm.com
Signed-off-by: Kees Cook <kees@kernel.org>
arch/arm64/kernel/ptrace.c

index a360e52db02fa54218772042bccc1c5f87374899..0e88f5545d3d734581613d30ad7f2e25fa6e75b2 100644 (file)
@@ -1586,7 +1586,7 @@ enum aarch64_regset {
 
 static const struct user_regset aarch64_regsets[] = {
        [REGSET_GPR] = {
-               .core_note_type = NT_PRSTATUS,
+               USER_REGSET_NOTE_TYPE(PRSTATUS),
                .n = sizeof(struct user_pt_regs) / sizeof(u64),
                .size = sizeof(u64),
                .align = sizeof(u64),
@@ -1594,7 +1594,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = gpr_set
        },
        [REGSET_FPR] = {
-               .core_note_type = NT_PRFPREG,
+               USER_REGSET_NOTE_TYPE(PRFPREG),
                .n = sizeof(struct user_fpsimd_state) / sizeof(u32),
                /*
                 * We pretend we have 32-bit registers because the fpsr and
@@ -1607,7 +1607,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = fpr_set
        },
        [REGSET_TLS] = {
-               .core_note_type = NT_ARM_TLS,
+               USER_REGSET_NOTE_TYPE(ARM_TLS),
                .n = 2,
                .size = sizeof(void *),
                .align = sizeof(void *),
@@ -1616,7 +1616,7 @@ static const struct user_regset aarch64_regsets[] = {
        },
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
        [REGSET_HW_BREAK] = {
-               .core_note_type = NT_ARM_HW_BREAK,
+               USER_REGSET_NOTE_TYPE(ARM_HW_BREAK),
                .n = sizeof(struct user_hwdebug_state) / sizeof(u32),
                .size = sizeof(u32),
                .align = sizeof(u32),
@@ -1624,7 +1624,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = hw_break_set,
        },
        [REGSET_HW_WATCH] = {
-               .core_note_type = NT_ARM_HW_WATCH,
+               USER_REGSET_NOTE_TYPE(ARM_HW_WATCH),
                .n = sizeof(struct user_hwdebug_state) / sizeof(u32),
                .size = sizeof(u32),
                .align = sizeof(u32),
@@ -1633,7 +1633,7 @@ static const struct user_regset aarch64_regsets[] = {
        },
 #endif
        [REGSET_SYSTEM_CALL] = {
-               .core_note_type = NT_ARM_SYSTEM_CALL,
+               USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL),
                .n = 1,
                .size = sizeof(int),
                .align = sizeof(int),
@@ -1641,7 +1641,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = system_call_set,
        },
        [REGSET_FPMR] = {
-               .core_note_type = NT_ARM_FPMR,
+               USER_REGSET_NOTE_TYPE(ARM_FPMR),
                .n = 1,
                .size = sizeof(u64),
                .align = sizeof(u64),
@@ -1650,7 +1650,7 @@ static const struct user_regset aarch64_regsets[] = {
        },
 #ifdef CONFIG_ARM64_SVE
        [REGSET_SVE] = { /* Scalable Vector Extension */
-               .core_note_type = NT_ARM_SVE,
+               USER_REGSET_NOTE_TYPE(ARM_SVE),
                .n = DIV_ROUND_UP(SVE_PT_SIZE(ARCH_SVE_VQ_MAX,
                                              SVE_PT_REGS_SVE),
                                  SVE_VQ_BYTES),
@@ -1662,7 +1662,7 @@ static const struct user_regset aarch64_regsets[] = {
 #endif
 #ifdef CONFIG_ARM64_SME
        [REGSET_SSVE] = { /* Streaming mode SVE */
-               .core_note_type = NT_ARM_SSVE,
+               USER_REGSET_NOTE_TYPE(ARM_SSVE),
                .n = DIV_ROUND_UP(SVE_PT_SIZE(SME_VQ_MAX, SVE_PT_REGS_SVE),
                                  SVE_VQ_BYTES),
                .size = SVE_VQ_BYTES,
@@ -1671,7 +1671,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = ssve_set,
        },
        [REGSET_ZA] = { /* SME ZA */
-               .core_note_type = NT_ARM_ZA,
+               USER_REGSET_NOTE_TYPE(ARM_ZA),
                /*
                 * ZA is a single register but it's variably sized and
                 * the ptrace core requires that the size of any data
@@ -1687,7 +1687,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = za_set,
        },
        [REGSET_ZT] = { /* SME ZT */
-               .core_note_type = NT_ARM_ZT,
+               USER_REGSET_NOTE_TYPE(ARM_ZT),
                .n = 1,
                .size = ZT_SIG_REG_BYTES,
                .align = sizeof(u64),
@@ -1697,7 +1697,7 @@ static const struct user_regset aarch64_regsets[] = {
 #endif
 #ifdef CONFIG_ARM64_PTR_AUTH
        [REGSET_PAC_MASK] = {
-               .core_note_type = NT_ARM_PAC_MASK,
+               USER_REGSET_NOTE_TYPE(ARM_PAC_MASK),
                .n = sizeof(struct user_pac_mask) / sizeof(u64),
                .size = sizeof(u64),
                .align = sizeof(u64),
@@ -1705,7 +1705,7 @@ static const struct user_regset aarch64_regsets[] = {
                /* this cannot be set dynamically */
        },
        [REGSET_PAC_ENABLED_KEYS] = {
-               .core_note_type = NT_ARM_PAC_ENABLED_KEYS,
+               USER_REGSET_NOTE_TYPE(ARM_PAC_ENABLED_KEYS),
                .n = 1,
                .size = sizeof(long),
                .align = sizeof(long),
@@ -1714,7 +1714,7 @@ static const struct user_regset aarch64_regsets[] = {
        },
 #ifdef CONFIG_CHECKPOINT_RESTORE
        [REGSET_PACA_KEYS] = {
-               .core_note_type = NT_ARM_PACA_KEYS,
+               USER_REGSET_NOTE_TYPE(ARM_PACA_KEYS),
                .n = sizeof(struct user_pac_address_keys) / sizeof(__uint128_t),
                .size = sizeof(__uint128_t),
                .align = sizeof(__uint128_t),
@@ -1722,7 +1722,7 @@ static const struct user_regset aarch64_regsets[] = {
                .set = pac_address_keys_set,
        },
        [REGSET_PACG_KEYS] = {
-               .core_note_type = NT_ARM_PACG_KEYS,
+               USER_REGSET_NOTE_TYPE(ARM_PACG_KEYS),
                .n = sizeof(struct user_pac_generic_keys) / sizeof(__uint128_t),
                .size = sizeof(__uint128_t),
                .align = sizeof(__uint128_t),
@@ -1733,7 +1733,7 @@ static const struct user_regset aarch64_regsets[] = {
 #endif
 #ifdef CONFIG_ARM64_TAGGED_ADDR_ABI
        [REGSET_TAGGED_ADDR_CTRL] = {
-               .core_note_type = NT_ARM_TAGGED_ADDR_CTRL,
+               USER_REGSET_NOTE_TYPE(ARM_TAGGED_ADDR_CTRL),
                .n = 1,
                .size = sizeof(long),
                .align = sizeof(long),
@@ -1743,7 +1743,7 @@ static const struct user_regset aarch64_regsets[] = {
 #endif
 #ifdef CONFIG_ARM64_POE
        [REGSET_POE] = {
-               .core_note_type = NT_ARM_POE,
+               USER_REGSET_NOTE_TYPE(ARM_POE),
                .n = 1,
                .size = sizeof(long),
                .align = sizeof(long),
@@ -1753,7 +1753,7 @@ static const struct user_regset aarch64_regsets[] = {
 #endif
 #ifdef CONFIG_ARM64_GCS
        [REGSET_GCS] = {
-               .core_note_type = NT_ARM_GCS,
+               USER_REGSET_NOTE_TYPE(ARM_GCS),
                .n = sizeof(struct user_gcs) / sizeof(u64),
                .size = sizeof(u64),
                .align = sizeof(u64),
@@ -1943,7 +1943,7 @@ static int compat_tls_set(struct task_struct *target,
 
 static const struct user_regset aarch32_regsets[] = {
        [REGSET_COMPAT_GPR] = {
-               .core_note_type = NT_PRSTATUS,
+               USER_REGSET_NOTE_TYPE(PRSTATUS),
                .n = COMPAT_ELF_NGREG,
                .size = sizeof(compat_elf_greg_t),
                .align = sizeof(compat_elf_greg_t),
@@ -1951,7 +1951,7 @@ static const struct user_regset aarch32_regsets[] = {
                .set = compat_gpr_set
        },
        [REGSET_COMPAT_VFP] = {
-               .core_note_type = NT_ARM_VFP,
+               USER_REGSET_NOTE_TYPE(ARM_VFP),
                .n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
                .size = sizeof(compat_ulong_t),
                .align = sizeof(compat_ulong_t),
@@ -1968,7 +1968,7 @@ static const struct user_regset_view user_aarch32_view = {
 
 static const struct user_regset aarch32_ptrace_regsets[] = {
        [REGSET_GPR] = {
-               .core_note_type = NT_PRSTATUS,
+               USER_REGSET_NOTE_TYPE(PRSTATUS),
                .n = COMPAT_ELF_NGREG,
                .size = sizeof(compat_elf_greg_t),
                .align = sizeof(compat_elf_greg_t),
@@ -1976,7 +1976,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
                .set = compat_gpr_set
        },
        [REGSET_FPR] = {
-               .core_note_type = NT_ARM_VFP,
+               USER_REGSET_NOTE_TYPE(ARM_VFP),
                .n = VFP_STATE_SIZE / sizeof(compat_ulong_t),
                .size = sizeof(compat_ulong_t),
                .align = sizeof(compat_ulong_t),
@@ -1984,7 +1984,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
                .set = compat_vfp_set
        },
        [REGSET_TLS] = {
-               .core_note_type = NT_ARM_TLS,
+               USER_REGSET_NOTE_TYPE(ARM_TLS),
                .n = 1,
                .size = sizeof(compat_ulong_t),
                .align = sizeof(compat_ulong_t),
@@ -1993,7 +1993,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
        },
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
        [REGSET_HW_BREAK] = {
-               .core_note_type = NT_ARM_HW_BREAK,
+               USER_REGSET_NOTE_TYPE(ARM_HW_BREAK),
                .n = sizeof(struct user_hwdebug_state) / sizeof(u32),
                .size = sizeof(u32),
                .align = sizeof(u32),
@@ -2001,7 +2001,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
                .set = hw_break_set,
        },
        [REGSET_HW_WATCH] = {
-               .core_note_type = NT_ARM_HW_WATCH,
+               USER_REGSET_NOTE_TYPE(ARM_HW_WATCH),
                .n = sizeof(struct user_hwdebug_state) / sizeof(u32),
                .size = sizeof(u32),
                .align = sizeof(u32),
@@ -2010,7 +2010,7 @@ static const struct user_regset aarch32_ptrace_regsets[] = {
        },
 #endif
        [REGSET_SYSTEM_CALL] = {
-               .core_note_type = NT_ARM_SYSTEM_CALL,
+               USER_REGSET_NOTE_TYPE(ARM_SYSTEM_CALL),
                .n = 1,
                .size = sizeof(int),
                .align = sizeof(int),