mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-28 13:31:13 +00:00
42d6270439
GCC mainline shows the following error: ../sysdeps/unix/sysv/linux/mips/mips64/getdents64.c: In function '__getdents64': ../sysdeps/unix/sysv/linux/mips/mips64/getdents64.c:121:7: error: 'memcpy' forming offset [4, 7] is out of the bounds [0, 4] [-Werror=array-bounds] 121 | memcpy (((char *) dp + offsetof (struct dirent64, d_ino)), | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 122 | KDP_MEMBER (kdp, d_ino), sizeof ((struct dirent64){0}.d_ino)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../sysdeps/unix/sysv/linux/mips/mips64/getdents64.c:123:7: error: 'memcpy' forming offset [4, 7] is out of the bounds [0, 4] [-Werror=array-bounds] 123 | memcpy (((char *) dp + offsetof (struct dirent64, d_off)), | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 124 | KDP_MEMBER (kdp, d_off), sizeof ((struct dirent64){0}.d_off)); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The issue is due both d_ino and d_off fields for mips64-n32 kernel_dirent are 32-bits, while this is using memcpy to copy 64 bits from it into the glibc dirent64. The fix is to use a temporary buffer to read the correct type from kernel_dirent. Checked with a build-many-glibcs.py for mips64el-linux-gnu and I also checked the tst-getdents64 on mips64el 4.1.4 kernel with and without fallback enabled (by manually setting the getdents64_supported). |
||
---|---|---|
.. | ||
bits | ||
mips32 | ||
mips64 | ||
sys | ||
____longjmp_chk.c | ||
_test_and_set.c | ||
clone.S | ||
configure | ||
configure.ac | ||
dl-cache.h | ||
dl-static.c | ||
errlist-compat.c | ||
fxstat.c | ||
getcontext.S | ||
getrlimit64.c | ||
getsysstats.c | ||
Implies | ||
kernel_rt_sigframe.h | ||
kernel_sigaction.h | ||
kernel_stat.h | ||
kernel_termios.h | ||
kernel-features.h | ||
ldsodefs.h | ||
libc-abis | ||
lxstat.c | ||
makecontext.S | ||
Makefile | ||
mmap_info.h | ||
pipe.S | ||
readelflib.c | ||
register-dump.h | ||
setcontext.S | ||
setrlimit64.c | ||
shlib-versions | ||
sigcontextinfo.h | ||
struct_kernel_msqid64_ds.h | ||
struct_kernel_semid64_ds.h | ||
struct_kernel_shmid64_ds.h | ||
swapcontext.S | ||
syscalls.list | ||
sysdep.h | ||
ucontext_i.sym | ||
unwind-arch.h | ||
ustat.c | ||
Versions | ||
vfork.S | ||
xstat.c | ||
xstatconv.c | ||
xstatver.h |