When opening devices nodes on hostfs, it does not make sense to call access(), since we are not going to open the file on the host. If the device node is owned by root, the root user in UML should succeed in opening it, even if UML won't be able to open the file. As reported by Rob Landley, UML currently does not follow this, so here's a fix. Signed-off-by: Paolo 'Blaisorblade' Giarrusso CC: Rob Landley Signed-off-by: Andrew Morton --- 25-akpm/fs/hostfs/hostfs_kern.c | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-) diff -puN fs/hostfs/hostfs_kern.c~uml-fix-hostfs-special-perm-handling fs/hostfs/hostfs_kern.c --- 25/fs/hostfs/hostfs_kern.c~uml-fix-hostfs-special-perm-handling Wed Mar 30 15:55:51 2005 +++ 25-akpm/fs/hostfs/hostfs_kern.c Wed Mar 30 15:55:51 2005 @@ -806,15 +806,21 @@ int hostfs_permission(struct inode *ino, char *name; int r = 0, w = 0, x = 0, err; - if(desired & MAY_READ) r = 1; - if(desired & MAY_WRITE) w = 1; - if(desired & MAY_EXEC) x = 1; + if (desired & MAY_READ) r = 1; + if (desired & MAY_WRITE) w = 1; + if (desired & MAY_EXEC) x = 1; name = inode_name(ino, 0); - if(name == NULL) return(-ENOMEM); - err = access_file(name, r, w, x); + if (name == NULL) return(-ENOMEM); + + if (S_ISCHR(ino->i_mode) || S_ISBLK(ino->i_mode) || + S_ISFIFO(ino->i_mode) || S_ISSOCK(ino->i_mode)) + err = 0; + else + err = access_file(name, r, w, x); kfree(name); - if(!err) err = generic_permission(ino, desired, NULL); - return(err); + if(!err) + err = generic_permission(ino, desired, NULL); + return err; } int hostfs_setattr(struct dentry *dentry, struct iattr *attr) _