]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/corefiles] Fix segfault in core_target_open
authorTom de Vries <tdevries@suse.de>
Fri, 7 Feb 2025 15:17:52 +0000 (16:17 +0100)
committerTom de Vries <tdevries@suse.de>
Fri, 7 Feb 2025 15:17:52 +0000 (16:17 +0100)
On x86_64-freebsd, with test-case gdb.arch/i386-biarch-core.exp I run into a
segfault here in corelow.c:core_target_open:
...
    {
      gdb::unique_xmalloc_ptr<char> failing_command = make_unique_xstrdup
        (bfd_core_file_failing_command (current_program_space->core_bfd ()));
      if (failing_command != nullptr)
        gdb_printf (_("Core was generated by `%s'.\n"),
                    failing_command.get ());
    }
...
where bfd_core_file_failing_command returns nullptr, so the segfault happens
somewhere during "strdup (nullptr)".

There doesn't seem to be a need to make a copy of the string, so fix this by
dropping the make_unique_xstrdup.

Tested on x86_64-linux.
Tested the test-case on x86_64-freebsd.

Approved-By: Tom Tromey <tom@tromey.com>
PR corefiles/32634
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32634

gdb/corelow.c

index ee57a9c4865b37a27a3956469909f2b8a98e3a0a..59c1667710986fbffdb627e494e9ee3bc852febb 100644 (file)
@@ -1188,11 +1188,11 @@ core_target_open (const char *arg, int from_tty)
     }
   else
     {
-      gdb::unique_xmalloc_ptr<char> failing_command = make_unique_xstrdup
-       (bfd_core_file_failing_command (current_program_space->core_bfd ()));
+      const char *failing_command
+       = bfd_core_file_failing_command (current_program_space->core_bfd ());
       if (failing_command != nullptr)
        gdb_printf (_("Core was generated by `%s'.\n"),
-                   failing_command.get ());
+                   failing_command);
     }
 
   /* Clearing any previous state of convenience variables.  */