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 <jlayton@redhat.com> Cc: Steven French <sfrench@us.ibm.com> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
188b95dd8e
commit
d32c4f2626
@@ -1538,6 +1538,11 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
time_buf.Attributes = 0;
|
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) {
|
if (attrs->ia_valid & ATTR_MODE) {
|
||||||
cFYI(1, ("Mode changed to 0x%x", attrs->ia_mode));
|
cFYI(1, ("Mode changed to 0x%x", attrs->ia_mode));
|
||||||
mode = attrs->ia_mode;
|
mode = attrs->ia_mode;
|
||||||
|
Reference in New Issue
Block a user