--- uml-2.4.24/mm/filemap.c.orig 2005-02-18 22:27:31.000000000 +0200 +++ uml-2.4.24/mm/filemap.c 2005-02-18 22:49:02.960952568 +0200 @@ -2993,7 +2993,20 @@ inline void remove_suid(struct inode *in /* was any of the uid bits set? */ mode &= inode->i_mode; if (mode && !capable(CAP_FSETID)) { + struct inode_operations *op = inode->i_op; inode->i_mode &= ~mode; + + if (op && op->setattr_raw) { + struct iattr newattrs; + int result; + newattrs.ia_mode = inode->i_mode; + + newattrs.ia_valid = ATTR_FORCE | ATTR_MODE; + result = op->setattr_raw(inode, &newattrs); + /* the file system wants to use normal vfs path now */ + if (result != -EOPNOTSUPP) + return; /* No way to return status. Whoops! */ + } mark_inode_dirty(inode); } }