]> sourceware.org Git - valgrind.git/commitdiff
PR140939 --track-fds reports leakage of stdout/in/err and doesn't respect -q
authorMark Wielaard <mark@klomp.org>
Sun, 7 Feb 2021 23:25:52 +0000 (00:25 +0100)
committerMark Wielaard <mark@klomp.org>
Wed, 10 Feb 2021 18:37:08 +0000 (19:37 +0100)
Make --track-fds=yes not report on file descriptors 0, 1, and 2 (stdin,
stdout, and stderr) by default. Add a new option --track-fds=all that does
report on the std file descriptors still being open. Update testsuite and
documentation.

Original patch by Peter Kelly <pmk@cs.adelaide.edu.au>
Updated by Daniel Fahlgren <daniel@fahlgren.se>

https://bugs.kde.org/show_bug.cgi?id=140939

26 files changed:
NEWS
coregrind/m_gdbserver/server.c
coregrind/m_main.c
coregrind/m_options.c
coregrind/m_syswrap/syswrap-generic.c
coregrind/pub_core_options.h
docs/xml/manual-core-adv.xml
docs/xml/manual-core.xml
gdbserver_tests/mchelp.stdoutB.exp
gdbserver_tests/mssnapshot.stderrB.exp
none/tests/cmdline1.stdout.exp
none/tests/cmdline2.stdout.exp
none/tests/fdleak_cmsg.stderr.exp
none/tests/fdleak_cmsg.vgtest
none/tests/fdleak_creat.stderr.exp
none/tests/fdleak_creat.vgtest
none/tests/fdleak_dup.stderr.exp
none/tests/fdleak_dup.vgtest
none/tests/fdleak_dup2.stderr.exp
none/tests/fdleak_dup2.vgtest
none/tests/fdleak_fcntl.stderr.exp
none/tests/fdleak_fcntl.vgtest
none/tests/fdleak_ipv4.stderr.exp
none/tests/fdleak_open.stderr.exp
none/tests/fdleak_pipe.stderr.exp
none/tests/fdleak_socketpair.stderr.exp

diff --git a/NEWS b/NEWS
index 5342336eccd9c729fe0de90c1e61f50f931eedfa..cd372235f2bc011756f8253fc3533f9fa35e9feb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -52,6 +52,7 @@ To see details of a given bug, visit
 where XXXXXX is the bug number as listed below.
 
 140178  open("/proc/self/exe", ...); doesn't quite work
+140939 --track-fds reports leakage of stdout/in/err and doesn't respect -q
 345077  linux syscall execveat support (linux 3.19)
 369029  handle linux syscalls sched_getattr and sched_setattr
 n-i-bz  helgrind: If hg_cli__realloc fails, return NULL.
index cc809a8b632c60cff947c00716d56acb4b0cdf0d..8e4bae85674cb7b9bb5cee995532956d8235b35b 100644 (file)
@@ -234,7 +234,7 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
 "  v.info last_error       : show last error found\n"
 "  v.info location <addr>  : show information about location <addr>\n"
 "  v.info n_errs_found [msg] : show the nr of errors found so far and the given msg\n"
-"  v.info open_fds         : show open file descriptors (only if --track-fds=yes)\n"
+"  v.info open_fds         : show open file descriptors (only if --track-fds=[yes|all])\n"
 "  v.kill                  : kill the Valgrind process\n"
 "  v.clo <clo_option>...   : changes one or more dynamic command line options\n"
 "     with no clo_option, show the dynamically changeable options.\n"
@@ -427,7 +427,7 @@ int handle_gdb_valgrind_command (char *mon, OutputSink *sink_wanted_at_return)
             VG_(show_open_fds) ("");
          else
             VG_(gdb_printf)
-               ("Valgrind must be started with --track-fds=yes"
+               ("Valgrind must be started with --track-fds=[yes|all]"
                 " to show open fds\n");
          ret = 1;
          break;
index c182fd90e9f05857f210b3ab21f06503605e102c..68edc4d4997372bc55ad695715492fa78b664f2d 100644 (file)
@@ -110,7 +110,8 @@ static void usage_NORETURN ( int need_help )
 "    --vgdb-stop-at=event1,event2,... invoke gdbserver for given events [none]\n"
 "         where event is one of:\n"
 "           startup exit valgrindabexit all none\n"
-"    --track-fds=no|yes        track open file descriptors? [no]\n"
+"    --track-fds=no|yes|all    track open file descriptors? [no]\n"
+"                              all includes reporting stdin, stdout and stderr\n"
 "    --time-stamp=no|yes       add timestamps to log messages? [no]\n"
 "    --log-fd=<number>         log messages to file descriptor [2=stderr]\n"
 "    --log-file=<file>         log messages to <file>\n"
@@ -600,7 +601,17 @@ static void process_option (Clo_Mode mode,
    else if VG_BOOL_CLOM(cloPD, arg, "--show-below-main",  VG_(clo_show_below_main)) {}
    else if VG_BOOL_CLO(arg, "--keep-debuginfo",   VG_(clo_keep_debuginfo)) {}
    else if VG_BOOL_CLOM(cloPD, arg, "--time-stamp",       VG_(clo_time_stamp)) {}
-   else if VG_BOOL_CLO(arg, "--track-fds",        VG_(clo_track_fds)) {}
+   else if VG_STR_CLO(arg, "--track-fds",         tmp_str) {
+      if (VG_(strcmp)(tmp_str, "yes") == 0)
+         VG_(clo_track_fds) = 1;
+      else if (VG_(strcmp)(tmp_str, "all") == 0)
+         VG_(clo_track_fds) = 2;
+      else if (VG_(strcmp)(tmp_str, "no") == 0)
+         VG_(clo_track_fds) = 0;
+      else
+         VG_(fmsg_bad_option)(arg,
+            "Bad argument, should be 'yes', 'all' or 'no'\n");
+   }
    else if VG_BOOL_CLOM(cloPD, arg, "--trace-children",   VG_(clo_trace_children)) {}
    else if VG_BOOL_CLOM(cloPD, arg, "--child-silent-after-fork",
                         VG_(clo_child_silent_after_fork)) {}
index 10641d4faa0669ac249fea5f21e07a1576e3aceb..688523324e1d9d427eed5c96b7022886bbed410f 100644 (file)
@@ -172,7 +172,7 @@ Bool   VG_(clo_read_var_info)  = False;
 XArray *VG_(clo_req_tsyms);  // array of strings
 Bool   VG_(clo_run_libc_freeres) = True;
 Bool   VG_(clo_run_cxx_freeres) = True;
-Bool   VG_(clo_track_fds)      = False;
+UInt   VG_(clo_track_fds)      = 0;
 Bool   VG_(clo_show_below_main)= False;
 Bool   VG_(clo_keep_debuginfo) = False;
 Bool   VG_(clo_show_emwarns)   = False;
index 3810f74744925e924c0df90308b03259f2d75c33..0739ccc9af41f6ff67a73e39757998f793e9b4cc 100644 (file)
@@ -823,11 +823,28 @@ getsockdetails(Int fd)
 /* Dump out a summary, and a more detailed list, of open file descriptors. */
 void VG_(show_open_fds) (const HChar* when)
 {
-   OpenFd *i = allocated_fds;
+   OpenFd *i;
+   int non_std = 0;
 
-   VG_(message)(Vg_UserMsg, "FILE DESCRIPTORS: %d open %s.\n", fd_count, when);
+   for (i = allocated_fds; i; i = i->next) {
+      if (i->fd > 2)
+         non_std++;
+   }
+
+   /* If we are running quiet and there are either no open file descriptors
+      or not tracking all fds, then don't report anything.  */
+   if ((fd_count == 0
+        || ((non_std == 0) && (VG_(clo_track_fds) < 2)))
+       && (VG_(clo_verbosity) == 0))
+      return;
+
+   VG_(message)(Vg_UserMsg, "FILE DESCRIPTORS: %d open (%d std) %s.\n",
+                fd_count, fd_count - non_std, when);
+
+   for (i = allocated_fds; i; i = i->next) {
+      if (i->fd <= 2 && VG_(clo_track_fds) < 2)
+          continue;
 
-   while (i) {
       if (i->pathname) {
          VG_(message)(Vg_UserMsg, "Open file descriptor %d: %s\n", i->fd,
                       i->pathname);
@@ -850,8 +867,6 @@ void VG_(show_open_fds) (const HChar* when)
          VG_(message)(Vg_UserMsg, "   <inherited from parent>\n");
          VG_(message)(Vg_UserMsg, "\n");
       }
-
-      i = i->next;
    }
 
    VG_(message)(Vg_UserMsg, "\n");
index 136c0ff6e052069ef6c4462c6fdf403410801f20..5dd01addcc34d0a9ef8187b813366b84d1b442bd 100644 (file)
@@ -283,8 +283,8 @@ extern const HChar* VG_(clo_prefix_to_strip);
    wildcards. */
 extern XArray *VG_(clo_req_tsyms);
 
-/* Track open file descriptors? */
-extern Bool  VG_(clo_track_fds);
+/* Track open file descriptors? 0 = No, 1 = Yes, 2 = All (including std)  */
+extern UInt  VG_(clo_track_fds);
 
 /* Should we run __libc_freeres at exit?  Sometimes causes crashes.
    Default: YES.  Note this is subservient to VG_(needs).libc_freeres;
index 8d2e905e42bbd78543c58fafe4d621835823c48b..1fa801edc1f8f2d40a072cd10026a03c22f020e7 100644 (file)
@@ -1371,8 +1371,12 @@ client request.
   <listitem>
     <para><varname>v.info open_fds</varname> shows the list of open file
     descriptors and details related to the file descriptor.
-    This only works if <option>--track-fds=yes</option>
-    was given at Valgrind startup.</para>
+    This only works if <option>--track-fds=yes</option> or
+    <option>--track-fds=all</option> (to include
+    <computeroutput>stdin</computeroutput>,
+    <computeroutput>stdout</computeroutput> and
+    <computeroutput>stderr</computeroutput>) was given at Valgrindr
+    startup.</para>
   </listitem>
   
   <listitem>
index 2e90ab7b8cf3de64b8a5b4a936020637877fcf39..5d52d2e3bec92bbe4603f8498bd56076a3decbc7 100644 (file)
@@ -852,7 +852,7 @@ in most cases.  We group the available options by rough categories.</para>
 
   <varlistentry id="opt.track-fds" xreflabel="--track-fds">
     <term>
-      <option><![CDATA[--track-fds=<yes|no> [default: no] ]]></option>
+      <option><![CDATA[--track-fds=<yes|no|all> [default: no] ]]></option>
     </term>
     <listitem>
       <para>When enabled, Valgrind will print out a list of open file
@@ -860,7 +860,10 @@ in most cases.  We group the available options by rough categories.</para>
       command <varname>v.info open_fds</varname>.  Along with each
       file descriptor is printed a stack backtrace of where the file
       was opened and any details relating to the file descriptor such
-      as the file name or socket details.</para>
+      as the file name or socket details. Use <option>all</option> to
+      include reporting on <computeroutput>stdin</computeroutput>,
+      <computeroutput>stdout</computeroutput> and
+      <computeroutput>stderr</computeroutput>.</para>
     </listitem>
   </varlistentry>
 
index f8582de34581a71cd6447ce4be55228e6f63eed1..6f45932d108f66526bd204a0b31f2c73014917cc 100644 (file)
@@ -5,7 +5,7 @@ general valgrind monitor commands:
   v.info last_error       : show last error found
   v.info location <addr>  : show information about location <addr>
   v.info n_errs_found [msg] : show the nr of errors found so far and the given msg
-  v.info open_fds         : show open file descriptors (only if --track-fds=yes)
+  v.info open_fds         : show open file descriptors (only if --track-fds=[yes|all])
   v.kill                  : kill the Valgrind process
   v.clo <clo_option>...   : changes one or more dynamic command line options
      with no clo_option, show the dynamically changeable options.
@@ -64,7 +64,7 @@ general valgrind monitor commands:
   v.info last_error       : show last error found
   v.info location <addr>  : show information about location <addr>
   v.info n_errs_found [msg] : show the nr of errors found so far and the given msg
-  v.info open_fds         : show open file descriptors (only if --track-fds=yes)
+  v.info open_fds         : show open file descriptors (only if --track-fds=[yes|all])
   v.kill                  : kill the Valgrind process
   v.clo <clo_option>...   : changes one or more dynamic command line options
      with no clo_option, show the dynamically changeable options.
index 067303ef14de8b9e6f9e08d49ebe82354b32926a..8d463a4a7123bd13d224268430b97ef8126d921f 100644 (file)
@@ -6,7 +6,7 @@ general valgrind monitor commands:
   v.info last_error       : show last error found
   v.info location <addr>  : show information about location <addr>
   v.info n_errs_found [msg] : show the nr of errors found so far and the given msg
-  v.info open_fds         : show open file descriptors (only if --track-fds=yes)
+  v.info open_fds         : show open file descriptors (only if --track-fds=[yes|all])
   v.kill                  : kill the Valgrind process
   v.clo <clo_option>...   : changes one or more dynamic command line options
      with no clo_option, show the dynamically changeable options.
index 4b98743a66a1a976ff2ae5b0dec24ccd48763349..7f057095488749baa67fc3a7ec72013d32ed2858 100644 (file)
@@ -25,7 +25,8 @@ usage: valgrind [options] prog-and-args
     --vgdb-stop-at=event1,event2,... invoke gdbserver for given events [none]
          where event is one of:
            startup exit valgrindabexit all none
-    --track-fds=no|yes        track open file descriptors? [no]
+    --track-fds=no|yes|all    track open file descriptors? [no]
+                              all includes reporting stdin, stdout and stderr
     --time-stamp=no|yes       add timestamps to log messages? [no]
     --log-fd=<number>         log messages to file descriptor [2=stderr]
     --log-file=<file>         log messages to <file>
index 9e8e3df01f0f84c69e05d44a02d7ffcfb2d71288..7c8a23f8b07e5236d81650975b71edeb0c54bee6 100644 (file)
@@ -25,7 +25,8 @@ usage: valgrind [options] prog-and-args
     --vgdb-stop-at=event1,event2,... invoke gdbserver for given events [none]
          where event is one of:
            startup exit valgrindabexit all none
-    --track-fds=no|yes        track open file descriptors? [no]
+    --track-fds=no|yes|all    track open file descriptors? [no]
+                              all includes reporting stdin, stdout and stderr
     --time-stamp=no|yes       add timestamps to log messages? [no]
     --log-fd=<number>         log messages to file descriptor [2=stderr]
     --log-file=<file>         log messages to <file>
index 6e5a797b9f471659bc76b444a8d9cda7ddc247b2..0fe56eaeed11ac773b596b5ac84fcebf8ef80ddb 100644 (file)
@@ -1,6 +1,6 @@
 
 
-FILE DESCRIPTORS: 7 open at exit.
+FILE DESCRIPTORS: 7 open (3 std) at exit.
 Open AF_UNIX socket ...: /tmp/sock
    ...
 
@@ -24,7 +24,7 @@ Open file descriptor ...: /dev/null
 
 
 
-FILE DESCRIPTORS: 6 open at exit.
+FILE DESCRIPTORS: 6 open (3 std) at exit.
 Open file descriptor ...: /tmp/data2
    ...
 
index 5083320443bd6d782952ee36d939019fd0e8bbc0..4b4bd8ab06f2aa1b192486c102483359f8c7a4f6 100644 (file)
@@ -1,4 +1,4 @@
 prog: fdleak_cmsg
-vgopts: --track-fds=yes
+vgopts: --track-fds=all
 stderr_filter: filter_fdleak
 args: < /dev/null
index e7a6e918af8fc6c79642f1eef287cd58223159ec..7b70478b9d4619d125d4a4ce32410cbb1f152f56 100644 (file)
@@ -1,6 +1,6 @@
 
 
-FILE DESCRIPTORS: 4 open at exit.
+FILE DESCRIPTORS: 4 open (3 std) at exit.
 Open file descriptor ...: /tmp/file
    ...
 
index ffa412a4569ba6eb713dc3e49173e201584db61c..25c243e024413129eb9c8deae65b5d75354da130 100644 (file)
@@ -1,4 +1,4 @@
 prog: fdleak_creat
-vgopts: --track-fds=yes
+vgopts: --track-fds=all
 stderr_filter: filter_fdleak
 args: < /dev/null
index 7737a7d9dc374fd4ddf21d340fa0376144a00587..8ceada9230cec4e901441e52b6d1ef155c687aad 100644 (file)
@@ -1,6 +1,6 @@
 
 
-FILE DESCRIPTORS: 5 open at exit.
+FILE DESCRIPTORS: 5 open (3 std) at exit.
 Open file descriptor ...: /dev/null
    ...
 
index d150dfef0a1a9ff425f1cfdba28765f2c28ece2b..012fbe02ebd1f0c1e8e0c260c08366b20a685840 100644 (file)
@@ -1,4 +1,4 @@
 prog: fdleak_dup
-vgopts: --track-fds=yes
+vgopts: --track-fds=all
 stderr_filter: filter_fdleak
 args: < /dev/null
index 98d61a92a41b2df9156d2305cd705ee919b10deb..4576a578b3b456f1a1ab511755cb25a4f578a3a0 100644 (file)
@@ -1,6 +1,6 @@
 
 
-FILE DESCRIPTORS: 6 open at exit.
+FILE DESCRIPTORS: 6 open (3 std) at exit.
 Open file descriptor ...: /dev/null
    ...
 
index 7b0d95eeacffbe2202c100b783644978adf3e0ec..8d5e287b8eeef4157678094070b43ce044115d1e 100644 (file)
@@ -1,4 +1,4 @@
 prog: fdleak_dup2
-vgopts: --track-fds=yes
+vgopts: --track-fds=all
 stderr_filter: filter_fdleak
 args: < /dev/null
index 7737a7d9dc374fd4ddf21d340fa0376144a00587..8ceada9230cec4e901441e52b6d1ef155c687aad 100644 (file)
@@ -1,6 +1,6 @@
 
 
-FILE DESCRIPTORS: 5 open at exit.
+FILE DESCRIPTORS: 5 open (3 std) at exit.
 Open file descriptor ...: /dev/null
    ...
 
index 5b506eaafcdc9ddc93d4cd3a95acb146b6281b4d..9ee14740be53bb1c0b2211de4617b1300c563e7d 100644 (file)
@@ -1,4 +1,4 @@
 prog: fdleak_fcntl
-vgopts: --track-fds=yes
+vgopts: --track-fds=all
 stderr_filter: filter_fdleak
 args: < /dev/null
index 80c62019f1e6cb8180cc7fdaab467421ce1be8da..72c2b46859000204d80a4c52a992ad218ed7032c 100644 (file)
@@ -1,34 +1,16 @@
 
 
-FILE DESCRIPTORS: 5 open at exit.
+FILE DESCRIPTORS: 5 open (3 std) at exit.
 Open AF_INET socket 4: 127.0.0.1:... <-> 127.0.0.1:...
    ...
 
 Open AF_INET socket 3: 127.0.0.1:... <-> unbound
    ...
 
-Open file descriptor ...: ...
-   <inherited from parent>
 
-Open file descriptor ...: ...
-   <inherited from parent>
 
-Open file descriptor ...: /dev/null
-   <inherited from parent>
-
-
-
-FILE DESCRIPTORS: 4 open at exit.
+FILE DESCRIPTORS: 4 open (3 std) at exit.
 Open AF_INET socket 3: 127.0.0.1:... <-> 127.0.0.1:...
    ...
 
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: /dev/null
-   <inherited from parent>
-
 
index 948ed97d4ec1fa367a24014239fafdeb6ccb4ace..f3f51167f154b271c233ba7059cedd3580b60b27 100644 (file)
@@ -1,16 +1,7 @@
 
 
-FILE DESCRIPTORS: 4 open at exit.
+FILE DESCRIPTORS: 4 open (3 std) at exit.
 Open file descriptor ...: /dev/null
    ...
 
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: /dev/null
-   <inherited from parent>
-
 
index 832fd7e11c903ded058fda95ff91d4a384c0640b..5f92ea69c2c9abecd5b0b277993bb64d3c1a7084 100644 (file)
@@ -1,19 +1,10 @@
 
 
-FILE DESCRIPTORS: 5 open at exit.
+FILE DESCRIPTORS: 5 open (3 std) at exit.
 Open file descriptor ...:
    ...
 
 Open file descriptor ...:
    ...
 
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: /dev/null
-   <inherited from parent>
-
 
index 377b1318eef942cd7aa9734205e3f687fba3cf85..73832a108b1737fdb2733debbe7ea52e9b140bc5 100644 (file)
@@ -1,19 +1,10 @@
 
 
-FILE DESCRIPTORS: 5 open at exit.
+FILE DESCRIPTORS: 5 open (3 std) at exit.
 Open AF_UNIX socket ...: <unknown>
    ...
 
 Open AF_UNIX socket ...: <unknown>
    ...
 
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: ...
-   <inherited from parent>
-
-Open file descriptor ...: /dev/null
-   <inherited from parent>
-
 
This page took 0.072305 seconds and 5 git commands to generate.