HChar *description; /* Description of the file descriptor
might include the pathname */
ExeContext *where_closed; /* record the last close of fd */
- ExeContext *where_opened; /* recordwhere the fd was opened */
+ ExeContext *where_opened; /* recordwhere the fd was opened,
+ NULL if inherited file descriptor */
};
struct FdBadUse {
HChar *description; /* Description of the file descriptor
might include the pathname */
ExeContext *where_closed; /* record the last close of fd */
- ExeContext *where_opened; /* recordwhere the fd was opened */
+ ExeContext *where_opened; /* recordwhere the fd was opened,
+ NULL if inherited file descriptor */
};
struct NotClosedExtra {
VG_(pp_ExeContext)( where );
VG_(emit)("%sPreviously closed%s\n", auxpre, auxpost);
VG_(pp_ExeContext)(bce->where_closed);
- VG_(emit)("%sOriginally opened%s\n", auxpre, auxpost);
- VG_(pp_ExeContext)(bce->where_opened);
+ // Inherited file descriptors where never opened (by the program)
+ if (bce->where_opened) {
+ VG_(emit)("%sOriginally opened%s\n", auxpre, auxpost);
+ VG_(pp_ExeContext)(bce->where_opened);
+ }
} else if (VG_(get_error_kind)(err) == FdNotClosed) {
if (xml) VG_(emit)(" <kind>FdNotClosed</kind>\n");
struct NotClosedExtra *nce = (struct NotClosedExtra *)
fdleak_creat_xml.stderr.exp fdleak_creat_xml.vgtest \
fdleak_creat_sup.stderr.exp fdleak_creat_sup.supp \
fdleak_creat_sup.vgtest \
+ fdleak_doubleclose0.stderr.exp fdleak_doubleclose0.vgtest \
fdleak_dup.stderr.exp fdleak_dup.vgtest \
fdleak_dup_xml.stderr.exp fdleak_dup_xml.vgtest \
fdleak_dup2.stderr.exp fdleak_dup2.vgtest \
bug492678 \
closeall coolo_strlen \
discard exec-sigmask execve faultstatus fcntl_setown \
- fdleak_cmsg fdleak_creat fdleak_dup fdleak_dup2 \
+ fdleak_cmsg fdleak_creat fdleak_doubleclose0 fdleak_dup fdleak_dup2 \
fdleak_fcntl fdleak_ipv4 fdleak_open fdleak_pipe \
fdleak_socketpair \
floored fork fucomip \
--- /dev/null
+File descriptor ...: ... is already closed
+ at 0x........: close (in /...libc...)
+ by 0x........: main
+ Previously closed
+ at 0x........: close (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