]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb: Fix "target file /proc/.../cmdline contained unexpected null characters"
authorIlya Leoshkevich <iii@linux.ibm.com>
Wed, 19 Jul 2023 11:27:45 +0000 (13:27 +0200)
committerIlya Leoshkevich <iii@linux.ibm.com>
Fri, 24 Nov 2023 11:26:16 +0000 (12:26 +0100)
When using the gcore command, GDB prints the following warning:

    (gdb) gcore
    warning: target file /proc/.../cmdline contained unexpected null characters

The reason is that cmdline is read with target_fileio_read_stralloc(),
which warns on seeing null characters. However, it's perfectly valid
for cmdline to contain \0s, so switch to target_fileio_read_alloc().

Approved-By: Tom Tromey <tom@tromey.com>
gdb/linux-tdep.c

index 26cf483b04a9e21e166bfe7c7fc08a38dcddc180..5fd64aa747408721ae8c0672e0a8cded22cc9b88 100644 (file)
@@ -1884,15 +1884,23 @@ linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
   pid = inferior_ptid.pid ();
   xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
   /* The full name of the program which generated the corefile.  */
-  gdb::unique_xmalloc_ptr<char> fname
-    = target_fileio_read_stralloc (NULL, filename);
+  gdb_byte *buf = NULL;
+  size_t buf_len = target_fileio_read_alloc (NULL, filename, &buf);
+  gdb::unique_xmalloc_ptr<char> fname ((char *)buf);
 
-  if (fname == NULL || fname.get ()[0] == '\0')
+  if (buf_len < 1 || fname.get ()[0] == '\0')
     {
       /* No program name was read, so we won't be able to retrieve more
         information about the process.  */
       return 0;
     }
+  if (fname.get ()[buf_len - 1] != '\0')
+    {
+      warning (_("target file %s "
+                "does not contain a trailing null character"),
+              filename);
+      return 0;
+    }
 
   memset (p, 0, sizeof (*p));