Skip site navigation (1)Skip section navigation (2)
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>