From: Mark W. <ma...@so...> - 2025-03-09 15:05:25
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=86ac4f2b004f57fa11224efafc1cd1c8fa8ded84 commit 86ac4f2b004f57fa11224efafc1cd1c8fa8ded84 Author: Mark Wielaard <ma...@kl...> Date: Sun Mar 9 15:59:29 2025 +0100 coregrind/m_debuginfo: don't try to examine zero sized mmapped files When run on an nfs filesystem memcheck/tests/pointer-trace fails because it generates warnings "connection to image failed". This is caused by trying to mmap a deleted file which the nfs file system represents as a (hidden) regular file. This is normally not a problem except when that file is empty. Fix this by not trying to check whether a file is an ELF or MACHO against an empty (regular) file in di_notify_mmap. An empty file is never a valid ELF or MACHO file (and cannot be represented as DiImage). https://bugs.kde.org/show_bug.cgi?id=501119 Diff: --- NEWS | 1 + coregrind/m_debuginfo/debuginfo.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 0fcbc5d0e2..16cfeef2a4 100644 --- a/NEWS +++ b/NEWS @@ -56,6 +56,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. 498492 none/tests/amd64/lzcnt64 crashes on FreeBSD compiled with clang 499183 FreeBSD: differences in avx-vmovq output 499212 mmap() with MAP_ALIGNED() returns unaligned pointer +501119 memcheck/tests/pointer-trace fails when run on NFS filesystem 501194 Fix ML_(check_macho_and_get_rw_loads) so that it is correct for any number of segment commands diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c index 612833a997..15686fc5c4 100644 --- a/coregrind/m_debuginfo/debuginfo.c +++ b/coregrind/m_debuginfo/debuginfo.c @@ -1206,8 +1206,14 @@ ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd ) } /* Finally, the point of all this stattery: if it's not a regular file, - don't try to read debug info from it. */ - if (! VKI_S_ISREG(statbuf.mode)) + don't try to read debug info from it. Also if it is a "regular file" + but has a zero size then skip it. Having a zero size will definitely + fail when trying to create an DiImage and wouldn't be a valid elf or + macho file. This can happen when mmapping a deleted file, which + would normally fail in the check above, because the stat call will + fail. But if the deleted file is on an NFS file system then a fake + (regular) empty file might be returned. */ + if (! VKI_S_ISREG(statbuf.mode) || statbuf.size == 0) return 0; /* no uses of statbuf below here. */ |