Hi, I have tested this patch on my lab, the resutls of make and make check all were good. And make check did not introduce new XFAILS. The environment is: gcc 12.2.0, binutils 2.40, mips64el-linux-gnuabi64 Thanks, Ying 在 2023/8/30 03:30, Joe Simmons-Talbott via Libc-alpha 写道: > Ping. > > On Mon, Jun 26, 2023 at 09:16:21AM -0400, Joe Simmons-Talbott wrote: >> Read directly into the mips_abiflags struct rather than reading the >> entire segment and using alloca when the passed buffer is not big enough. >> >> Checked with build-many-glibcs.py on mips-linux-gnu >> --- >> Changes to v2: >> * Rather than use a scratch buffer use the mips_abiflags struct itself >> for reading since we're now just reading that much data and not the >> whole segment. >> >> sysdeps/mips/dl-machine-reject-phdr.h | 26 ++++++++++---------------- >> 1 file changed, 10 insertions(+), 16 deletions(-) >> >> diff --git a/sysdeps/mips/dl-machine-reject-phdr.h b/sysdeps/mips/dl-machine-reject-phdr.h >> index 104b590661..b784697fc1 100644 >> --- a/sysdeps/mips/dl-machine-reject-phdr.h >> +++ b/sysdeps/mips/dl-machine-reject-phdr.h >> @@ -161,7 +161,7 @@ elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, unsigned int phnum, >> Lmid_t nsid; >> int in_abi = -1; >> struct abi_req in_req; >> - Elf_MIPS_ABIFlags_v0 *mips_abiflags = NULL; >> + Elf_MIPS_ABIFlags_v0 mips_abiflags; >> bool perfect_match = false; >> #if _MIPS_SIM == _ABIO32 >> unsigned int cur_mode = -1; >> @@ -176,25 +176,19 @@ elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, unsigned int phnum, >> /* Read the attributes section. */ >> if (ph != NULL) >> { >> - ElfW(Addr) size = ph->p_filesz; >> + ElfW(Addr) size = sizeof (Elf_MIPS_ABIFlags_v0); >> >> - if (ph->p_offset + size <= len) >> - mips_abiflags = (Elf_MIPS_ABIFlags_v0 *) (buf + ph->p_offset); >> - else >> - { >> - mips_abiflags = alloca (size); >> - __lseek (fd, ph->p_offset, SEEK_SET); >> - if (__libc_read (fd, (void *) mips_abiflags, size) != size) >> - REJECT (" unable to read PT_MIPS_ABIFLAGS\n"); >> - } >> - >> - if (size < sizeof (Elf_MIPS_ABIFlags_v0)) >> + if (ph->p_filesz < size) >> REJECT (" contains malformed PT_MIPS_ABIFLAGS\n"); >> >> - if (__glibc_unlikely (mips_abiflags->flags2 != 0)) >> - REJECT (" unknown MIPS.abiflags flags2: %u\n", mips_abiflags->flags2); >> + __lseek (fd, ph->p_offset, SEEK_SET); >> + if (__libc_read (fd, (void *) &mips_abiflags, size) != size) >> + REJECT (" unable to read PT_MIPS_ABIFLAGS\n"); >> + >> + if (__glibc_unlikely (mips_abiflags.flags2 != 0)) >> + REJECT (" unknown MIPS.abiflags flags2: %u\n", mips_abiflags.flags2); >> >> - in_abi = mips_abiflags->fp_abi; >> + in_abi = mips_abiflags.fp_abi; >> } >> >> /* ANY is compatible with anything. */ >> -- >> 2.39.2 >>