This patch copies the the missing VSX regset to the compat_regsets array. Not having this regset can cause issues in fs/binfmt_elf.c in the fill_thread_core_info function, which iterates over all the regsets defined in compat_regsets to fill note info for a core dump of a 32-bit thread. However, the number of regset notes allocated for writing is the number of regsets with core_note_type != 0. If the regset array has an entry with core_note_type == 0, which is the case for the missing VSX element, this can cause later regsets to be written outside the bounds of the allocated notes.
The compat_regset is also missing entries for REGSET_PMR and REGSET_PKEY, but because these are at the end of the powerpc_regset enum, the designated initializers for the compat_regset array don't cause implicit elements to be created, like they did for REGSET_VSX. --- arch/powerpc/kernel/ptrace.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 69123feaef9e..2da0668a96dc 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c @@ -2237,6 +2237,13 @@ static const struct user_regset compat_regsets[] = { .active = vr_active, .get = vr_get, .set = vr_set }, #endif +#ifdef CONFIG_VSX + [REGSET_VSX] = { + .core_note_type = NT_PPC_VSX, .n = 32, + .size = sizeof(double), .align = sizeof(double), + .active = vsr_active, .get = vsr_get, .set = vsr_set + }, +#endif #ifdef CONFIG_SPE [REGSET_SPE] = { .core_note_type = NT_PPC_SPE, .n = 35, -- 2.13.6