From d32c4f2626acc385d5187bd5c0c24f442328dc60 Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Thu, 18 Oct 2007 03:05:22 -0700 Subject: 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 --- fs/cifs/inode.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'fs/cifs') diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index dd4167762a8e..279f3c5e0ce3 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; -- cgit v1.2.3-59-g8ed1b