https://bugs.kde.org/show_bug.cgi?id=493418
--- Comment #6 from Mark Wielaard <[email protected]> --- Looks good, thanks. Small tweak to the new testcase and code for some corner cases diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index e7c9c40e5..175a89199 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -1675,7 +1675,8 @@ Bool ML_(fd_allowed)(Int fd, const HChar *syscallname, ThreadId tid, client is exactly what we don't want. */ /* croak? */ - if (!isNewFd && (VG_(strcmp)("close", syscallname) != 0)) { + if (VG_(clo_track_fds) && allowed + && !isNewFd && (VG_(strcmp)("close", syscallname) != 0)) { const OpenFd *openbadfd = ML_(find_OpenFd)(fd); if (!openbadfd) { /* File descriptor which was never created (or inherited). */ diff --git a/none/tests/use_after_close.c b/none/tests/use_after_close.c index 888a76a60..deb4e6888 100644 --- a/none/tests/use_after_close.c +++ b/none/tests/use_after_close.c @@ -8,11 +8,24 @@ int main(void) char *string = "bad\n"; int fd = dup(2); - write(fd, string, 3); + /* OK. */ + write(fd, string, 4); close(fd); - write(fd, string, 3); - write(7, string, 3); + /* Already closed. */ + write(fd, string, 4); + + /* Never created. */ + write(7, string, 4); + + /* Invalid. */ + write(-7, string, 4); + + /* Double double close. */ + close(fd); + + /* Invalid close. */ + close (-7); return 0; } diff --git a/none/tests/use_after_close.stderr.exp b/none/tests/use_after_close.stderr.exp index d3c6fa456..1ef31c655 100644 --- a/none/tests/use_after_close.stderr.exp +++ b/none/tests/use_after_close.stderr.exp @@ -1,4 +1,5 @@ -badFile descriptor 3 was closed already +bad +File descriptor 3 was closed already Previously closed at 0x........: close (in /...libc...) by 0x........: main @@ -10,3 +11,18 @@ badFile descriptor 3 was closed already File descriptor 7 was never created at 0x........: write (in /...libc...) by 0x........: main +File descriptor -7 Invalid file descriptor + at 0x........: write (in /...libc...) + by 0x........: main +File descriptor ...: ... is already closed + at 0x........: close (in /...libc...) + by 0x........: main + Previously closed + at 0x........: close (in /...libc...) + by 0x........: main + Originally opened + at 0x........: dup (in /...libc...) + by 0x........: main +File descriptor -7 Invalid file descriptor + at 0x........: close (in /...libc...) + by 0x........: main -- You are receiving this mail because: You are watching all bug changes.
