Subject: kern/21915: Linux's mkdir(2) emulation bug
To: None <>
From: None <>
List: netbsd-bugs
Date: 06/17/2003 05:29:50
>Number:         21915
>Category:       kern
>Synopsis:       Linux's mkdir(2) emulation bug
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jun 17 05:31:00 UTC 2003
>Originator:     Kazu Yamamoto
>Release:        1.6T
NetBSD 1.6T NetBSD 1.6T (HIKARI) #0: Fri Jun 13 03:32:39 JST 2003 i386

NetBSD's mkdir(2) causes an error (ENOENT) if the first argment ends
with "/". e.g. mkdir("/foo/", mode)

Linux's mkdir(2) succeeds even if the first argment ends with "/".

The Linux emulator of NetBSD does NOT take care of this difference. Consider a Linux application which call mkdir("/foo/", mode). It runs well
on Linux but not on NetBSD's Linux emulation.

I guess other emulations including FreeBSD optentially have the same bug.
I have no idea of other system calls like stat(), open(), ...

Compile the following code on Linux and run it on NetBSD like
"a.out /foo/". This operation must succeed.

#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>

main (int argc, char **argv)
        mode_t mode, dir_mode;

        mode = (S_IRWXU | S_IRWXG | S_IRWXO) & ~umask(0);
        dir_mode = mode | S_IWUSR | S_IXUSR;

        if (mkdir(argv[1], dir_mode) == -1) {

Import the mkdir(1) hack to the Linux emulation.