Message ID | 20220202121433.3697146-1-rppt@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fs/binfmt_elf: fix PT_LOAD p_align values for loaders | expand |
Hi, Mike, On Wed, 2 Feb 2022 at 12:14, Mike Rapoport <rppt@kernel.org> wrote: > > From: Mike Rapoport <rppt@linux.ibm.com> > > Rui Salvaterra reported that Aisleroit solitaire crashes with "Wrong > __data_start/_end pair" assertion from libgc after update to v5.17-rc1. > > Bisection pointed to commit 9630f0d60fec ("fs/binfmt_elf: use PT_LOAD > p_align values for static PIE") that fixed handling of static PIEs, but > made the condition that guards load_bias calculation to exclude loader > binaries. > > Restoring the check for presence of interpreter fixes the problem. > > Fixes: 9630f0d60fec ("fs/binfmt_elf: use PT_LOAD p_align values for static PIE") > Reported-by: Rui Salvaterra <rsalvaterra@gmail.com> > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> > --- > fs/binfmt_elf.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c > index 605017eb9349..9e11e6f13e83 100644 > --- a/fs/binfmt_elf.c > +++ b/fs/binfmt_elf.c > @@ -1117,7 +1117,7 @@ static int load_elf_binary(struct linux_binprm *bprm) > * without MAP_FIXED nor MAP_FIXED_NOREPLACE). > */ > alignment = maximum_alignment(elf_phdata, elf_ex->e_phnum); > - if (alignment > ELF_MIN_ALIGN) { > + if (interpreter || alignment > ELF_MIN_ALIGN) { > load_bias = ELF_ET_DYN_BASE; > if (current->flags & PF_RANDOMIZE) > load_bias += arch_mmap_rnd(); > -- > 2.34.1 > The patch does fix the problem for me, and is thus Tested-by: Rui Salvaterra <rsalvaterra@gmail.com> Thanks, Rui
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 605017eb9349..9e11e6f13e83 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1117,7 +1117,7 @@ static int load_elf_binary(struct linux_binprm *bprm) * without MAP_FIXED nor MAP_FIXED_NOREPLACE). */ alignment = maximum_alignment(elf_phdata, elf_ex->e_phnum); - if (alignment > ELF_MIN_ALIGN) { + if (interpreter || alignment > ELF_MIN_ALIGN) { load_bias = ELF_ET_DYN_BASE; if (current->flags & PF_RANDOMIZE) load_bias += arch_mmap_rnd();