From: Jeff Layton Date: Thu, 18 Oct 2007 10:05:22 +0000 (-0700) Subject: CIFS: ignore mode change if it's just for clearing setuid/setgid bits X-Git-Tag: v2.6.24-rc1~398 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d32c4f2626acc385d5187bd5c0c24f442328dc60;p=linux-2.6 CIFS: ignore mode change if it's just for clearing setuid/setgid bits If the ATTR_KILL_S*ID bits are set then any mode change is only for clearing the setuid/setgid bits. For CIFS, skip the mode change and let the server handle it. Signed-off-by: Jeff Layton Cc: Steven French Cc: Christoph Hellwig Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index dd4167762a..279f3c5e0c 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;