]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Avoid collect2 calling signal unsafe functions and/or unlink with uninitialized memory
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Mon, 17 Feb 2020 16:40:07 +0000 (17:40 +0100)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Mon, 24 Feb 2020 13:43:06 +0000 (14:43 +0100)
2020-02-24  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* collect2.c (tool_cleanup): Avoid calling not signal-safe
functions.
(maybe_run_lto_and_relink): Avoid possible signal handler
access to unintialzed memory (lto_o_files).

gcc/ChangeLog
gcc/collect2.c

index 8d8dbc0bdff544501c3185bb371a175576b9dc2f..a79889e1bf20d06ea02fd9f90117b7fde2a84a1a 100644 (file)
@@ -1,3 +1,10 @@
+2020-02-24  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       * collect2.c (tool_cleanup): Avoid calling not signal-safe
+       functions.
+       (maybe_run_lto_and_relink): Avoid possible signal handler
+       access to unintialzed memory (lto_o_files).
+
 2020-02-23  Peter Bergner <bergner@linux.ibm.com>
 
        Backport from master
index eb84f84639be7593ae4937764bec44930a6389ac..8f092e7539eca426c3f7c87b53a34c1eb83fa008 100644 (file)
@@ -384,6 +384,10 @@ static void scan_prog_file (const char *, scanpass, scanfilter);
 void
 tool_cleanup (bool from_signal)
 {
+  /* maybe_unlink may call notice, which is not signal safe.  */
+  if (from_signal)
+    verbose = false;
+
   if (c_file != 0 && c_file[0])
     maybe_unlink (c_file);
 
@@ -743,7 +747,10 @@ maybe_run_lto_and_relink (char **lto_ld_argv, char **object_lst,
              ++num_files;
          }
 
-       lto_o_files = XNEWVEC (char *, num_files + 1);
+       /* signal handler may access uninitialized memory
+          and delete whatever it points to, if lto_o_files
+          is not allocated with calloc.  */
+       lto_o_files = XCNEWVEC (char *, num_files + 1);
        lto_o_files[num_files] = NULL;
        start = XOBFINISH (&temporary_obstack, char *);
        for (i = 0; i < num_files; ++i)