[Bug 2060538] [NEW] rpcdebug segfault in s390x

Andreas Hasenack 2060538 at bugs.launchpad.net
Mon Apr 8 13:39:28 UTC 2024


Public bug reported:

Just running rpcdebug in noble on s390x causes a segfault. In gdb we
see:

Breakpoint 1, main (argc=1, argv=0x3ffffffa498) at rpcdebug.c:57
57              cdename = malloc(strlen(basename(argv[0])));
(gdb) n
58              if (cdename == NULL) {
(gdb) n
62              strcpy(cdename, basename(argv[0]));
(gdb) n
*** buffer overflow detected ***: terminated


It's the _FORTIFY_SOURCE=3 that is catching it, but only on s390x. Looks like an off-by-one.

>From the strcpy() manpage:

strcpy()
These  functions copy the string pointed to by src, into a string at the buffer pointed to by dst.  The programmer is responsible for allocating a destination buffer large enough, that is, strlen(src) + 1.  For the difference between the two functions, see RETURN VALUE.

Patch:

--- a/tools/rpcdebug/rpcdebug.c
+++ b/tools/rpcdebug/rpcdebug.c
@@ -54,7 +54,7 @@ main(int argc, char **argv)
 	char *		module = NULL;
 	int		c;
 
-	cdename = malloc(strlen(basename(argv[0])));
+	cdename = malloc(strlen(basename(argv[0])) + 1);
 	if (cdename == NULL) {
 	  fprintf(stderr, "failed in malloc\n");
 	  exit(1);

** Affects: nfs-utils (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to nfs-utils in Ubuntu.
https://bugs.launchpad.net/bugs/2060538

Title:
  rpcdebug segfault in s390x

Status in nfs-utils package in Ubuntu:
  New

Bug description:
  Just running rpcdebug in noble on s390x causes a segfault. In gdb we
  see:

  Breakpoint 1, main (argc=1, argv=0x3ffffffa498) at rpcdebug.c:57
  57              cdename = malloc(strlen(basename(argv[0])));
  (gdb) n
  58              if (cdename == NULL) {
  (gdb) n
  62              strcpy(cdename, basename(argv[0]));
  (gdb) n
  *** buffer overflow detected ***: terminated

  
  It's the _FORTIFY_SOURCE=3 that is catching it, but only on s390x. Looks like an off-by-one.

  From the strcpy() manpage:

  strcpy()
  These  functions copy the string pointed to by src, into a string at the buffer pointed to by dst.  The programmer is responsible for allocating a destination buffer large enough, that is, strlen(src) + 1.  For the difference between the two functions, see RETURN VALUE.

  Patch:

  --- a/tools/rpcdebug/rpcdebug.c
  +++ b/tools/rpcdebug/rpcdebug.c
  @@ -54,7 +54,7 @@ main(int argc, char **argv)
   	char *		module = NULL;
   	int		c;
   
  -	cdename = malloc(strlen(basename(argv[0])));
  +	cdename = malloc(strlen(basename(argv[0])) + 1);
   	if (cdename == NULL) {
   	  fprintf(stderr, "failed in malloc\n");
   	  exit(1);

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/2060538/+subscriptions




More information about the foundations-bugs mailing list