Date: Fri, 12 Mar 2004 10:22:00 +0100 (CET) From: Morten Rodal <morten@rodal.no> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/64150: [PATCH] ls(1) coredumps when started via execve(2) with no argv. Message-ID: <200403120922.i2C9M0jC002510@stud326.idi.ntnu.no> Resent-Message-ID: <200403120930.i2C9UNtq030886@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 64150
>Category: bin
>Synopsis: [PATCH] ls(1) coredumps when started via execve(2) with no argv.
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Mar 12 01:30:23 PST 2004
>Closed-Date:
>Last-Modified:
>Originator: Morten Rodal
>Release: FreeBSD 5.2-CURRENT i386
>Organization:
>Environment:
System: FreeBSD stud326.idi.ntnu.no 5.2-CURRENT FreeBSD 5.2-CURRENT #2: Mon Mar 1 02:38:57 CET 2004 root@stud326.idi.ntnu.no:/usr/obj/usr/src/sys/stud326 i386
>Description:
ls(1) calls the fts(3) functions for traversing a file hierarchy. If ls(1) is
executed via execve(2) system call with a NULL argv and envp it will make
the fts(3) functions core dump with a SIGBUS.
If execve(2) is executed with a NULL (I am not sure this is legal?) argv, the
executed program will have an argc value of -1.
>How-To-Repeat:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
execve("/bin/ls", NULL, NULL);
return (1);
}
>Fix:
--- ls.c.orig Fri Mar 12 10:19:08 2004
+++ ls.c Fri Mar 12 10:21:08 2004
@@ -430,7 +430,7 @@
else
printfcn = printcol;
- if (argc)
+ if (argc >= 1)
traverse(argc, argv, fts_options);
else
traverse(1, dotav, fts_options);
>Release-Note:
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403120922.i2C9M0jC002510>
