Subject: lib/13242: execvp does not loop on ENOTDIR from execve
To: None <>
From: john heasley <>
List: netbsd-bugs
Date: 06/19/2001 00:12:13
>Number:         13242
>Category:       lib
>Synopsis:       execvp does not loop on ENOTDIR from execve
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jun 18 17:10:01 PDT 2001
>Originator:     john heasley
>Release:        NetBSD-current ~5/25
NetBSD roome 1.5V NetBSD 1.5V (heas) #10: Fri May 25 19:38:02 UTC 2001     root@roome:/home/src/sys/arch/i386/compile/heas i386
Architecture: 386
Machine: 686
	if an executable binary (or #!) is listed in PATH, execve returns
	ENOTDIR and execvp considers this an "unrecoverable" error instead
	of proceeding to the next PATH component.
	tcsh% setenv PATH ~/bin:$PATH
	tcsh% cp /usr/bin/tail ~/bin
	tcsh% setenv SSH_RSH ssh
	tcsh% cvs -d user@host:/path co something
		[cvs works here, presumably because of it's cmd cache (rehash)]
	cvs [checkout aborted]: cannot exec ssh: Not a directory
	cvs [checkout aborted]: end of file from server (consult above messages if any)

	ktrace: exec of 'cvs' failed: Not a directory
	  1606 ktrace   EMUL  "netbsd"
	  1606 ktrace   CALL  execve(0xbfbfd270,0xbfbfd704,0xbfbfd71c)
	  1606 ktrace   NAMI  "/home/heas/bin/cvs"
	  1606 ktrace   RET   execve -1 errno 20 Not a directory

	ignore (loop) on ENOTDIR

	Index: execvp.c
	RCS file: /cvsroot/basesrc/lib/libc/gen/execvp.c,v
	retrieving revision 1.16
	diff -c -r1.16 execvp.c
	*** execvp.c	2000/01/22 22:19:09	1.16
	--- execvp.c	2001/06/19 00:08:50
	*** 132,137 ****
	--- 132,138 ----
	  		case EACCES:
	  			eacces = 1;
	+ 		case ENOTDIR:
	  		case ENOENT:
	  		case ENOEXEC: