Message ID | 20201224194438.GY3579531@ZenIV.linux.org.uk (mailing list archive) |
---|---|
State | Accepted |
Commit | 698222457465ce343443be81c5512edda86e5914 |
Headers | show |
Series | [RFC] NT_FILE/NT_SIGINFO breakage on mips compat coredumps | expand |
On Thu, Dec 24, 2020 at 07:44:38PM +0000, Al Viro wrote: > [mips] fix malformed NT_FILE and NT_SIGINFO in 32bit coredumps > > Patches that introduced NT_FILE and NT_SIGINFO notes back in 2012 > had taken care of native (fs/binfmt_elf.c) and compat (fs/compat_binfmt_elf.c) > coredumps; unfortunately, compat on mips (which does not go through the > usual compat_binfmt_elf.c) had not been noticed. > > As the result, both N32 and O32 coredumps on 64bit mips kernels > have those sections malformed enough to confuse the living hell out of > all gdb and readelf versions (up to and including the tip of binutils-gdb.git). > > Longer term solution is to make both O32 and N32 compat use the > regular compat_binfmt_elf.c, but that's too much for backports. The minimal > solution is to do in arch/mips/kernel/binfmt_elf[on]32.c the same thing > those patches have done in fs/compat_binfmt_elf.c > > Cc: stable@kernel.org # v3.7+ > Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> > --- > diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c > index 6ee3f7218c67..c4441416e96b 100644 > --- a/arch/mips/kernel/binfmt_elfn32.c > +++ b/arch/mips/kernel/binfmt_elfn32.c > @@ -103,4 +103,11 @@ jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value) > #undef ns_to_kernel_old_timeval > #define ns_to_kernel_old_timeval ns_to_old_timeval32 > > +/* > + * Some data types as stored in coredump. > + */ > +#define user_long_t compat_long_t > +#define user_siginfo_t compat_siginfo_t > +#define copy_siginfo_to_external copy_siginfo_to_external32 > + > #include "../../../fs/binfmt_elf.c" > diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c > index 6dd103d3cebb..7b2a23f48c1a 100644 > --- a/arch/mips/kernel/binfmt_elfo32.c > +++ b/arch/mips/kernel/binfmt_elfo32.c > @@ -106,4 +106,11 @@ jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value) > #undef ns_to_kernel_old_timeval > #define ns_to_kernel_old_timeval ns_to_old_timeval32 > > +/* > + * Some data types as stored in coredump. > + */ > +#define user_long_t compat_long_t > +#define user_siginfo_t compat_siginfo_t > +#define copy_siginfo_to_external copy_siginfo_to_external32 > + > #include "../../../fs/binfmt_elf.c" LGTM, I've applied it to mips-fixes. Thomas.
diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c index 6ee3f7218c67..c4441416e96b 100644 --- a/arch/mips/kernel/binfmt_elfn32.c +++ b/arch/mips/kernel/binfmt_elfn32.c @@ -103,4 +103,11 @@ jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value) #undef ns_to_kernel_old_timeval #define ns_to_kernel_old_timeval ns_to_old_timeval32 +/* + * Some data types as stored in coredump. + */ +#define user_long_t compat_long_t +#define user_siginfo_t compat_siginfo_t +#define copy_siginfo_to_external copy_siginfo_to_external32 + #include "../../../fs/binfmt_elf.c" diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c index 6dd103d3cebb..7b2a23f48c1a 100644 --- a/arch/mips/kernel/binfmt_elfo32.c +++ b/arch/mips/kernel/binfmt_elfo32.c @@ -106,4 +106,11 @@ jiffies_to_old_timeval32(unsigned long jiffies, struct old_timeval32 *value) #undef ns_to_kernel_old_timeval #define ns_to_kernel_old_timeval ns_to_old_timeval32 +/* + * Some data types as stored in coredump. + */ +#define user_long_t compat_long_t +#define user_siginfo_t compat_siginfo_t +#define copy_siginfo_to_external copy_siginfo_to_external32 + #include "../../../fs/binfmt_elf.c"