[Yaffs] Permission denied when non-root

Karl Olsen karl.olsen@mail.dk
Sun, 6 Feb 2005 03:54:33 +0100


Hello all,

I am having a problem with switching to a non-root user on my
AT91RM9200-based ARM system.  I am using Linux 2.6.10 with the AT91RM9200
patch from http://maxim.org.za/AT91RM9200/2.6/ (fixed so that NAND support
works) and the Yaffs patches by Frank Rowand, and a statically linked
Busybox 1.00.  / is on a Yaffs partition.

# mount
/dev/mtdblock1 on / type yaffs (rw,noatime)
/dev/mtdblock0 on /boot type yaffs (ro,noatime)
none on /proc type proc (rw,nodiratime)

Everything works fine when I'm root, and I can run Busybox commands and read
and write files.  But when I do a "su karl" it says:

/ # su karl
su: cannot run /bin/sh: Permission denied

/etc/passwd contains:
root:x:0:0:root:/root:/bin/sh
karl:x:500:100:KarlOlsen:/home/karl:/bin/sh

# ls -l -d /bin
drwxr-xr-x    1 root     root          512 Jan  1 00:00 bin

/bin/sh is a symlink pointing to /bin/busybox:
-rwxrwxrwx    1 root     root       438260 Jan  1 00:00 busybox

I have tried replacing /bin/sh in /etc/passwd with other commands, but I
always get the Permission denied.  The Busybox source shows that it
successfully changes identity to uid=500 and gid=100 and cd's to my home
directory but fails at the execv() that tried to run /bin/sh.

I tried the same with an initrd with romfs, and with that, it worked.  But
romfs doesn't seem to implement uid and gid for its files/directories.

Does anybody know if this problem can be related to Yaffs?  Does the Yaffs
filesystem have (hidden) mount options that can deny execution for non-root?

Regards,
Karl Olsen