diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index dd4167762a8edaf847913027a9265e3c293144ac..279f3c5e0ce316bf72e9ddb166a50586da206cfb 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -1538,6 +1538,11 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs) } time_buf.Attributes = 0; + + /* skip mode change if it's just for clearing setuid/setgid */ + if (attrs->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) + attrs->ia_valid &= ~ATTR_MODE; + if (attrs->ia_valid & ATTR_MODE) { cFYI(1, ("Mode changed to 0x%x", attrs->ia_mode)); mode = attrs->ia_mode;