From: Jeff Layton Make sure ecryptfs doesn't trip the BUG() in notify_change. This also allows the lower filesystem to interpret ATTR_KILL_S*ID in its own way. Signed-off-by: Jeff Layton Cc: Michael Halcrow Cc: Christoph Hellwig Cc: Neil Brown Cc: "J. Bruce Fields" Cc: Chris Mason Cc: Jeff Mahoney Cc: "Vladimir V. Saveliev" Cc: Josef 'Jeff' Sipek Cc: Trond Myklebust Cc: Steven French Signed-off-by: Andrew Morton --- fs/ecryptfs/inode.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff -puN fs/ecryptfs/inode.c~ecryptfs-allow-lower-fs-to-interpret-attr_kill_sid fs/ecryptfs/inode.c --- a/fs/ecryptfs/inode.c~ecryptfs-allow-lower-fs-to-interpret-attr_kill_sid +++ a/fs/ecryptfs/inode.c @@ -914,6 +914,14 @@ static int ecryptfs_setattr(struct dentr if (rc < 0) goto out; } + + /* + * mode change is for clearing setuid/setgid bits. Allow lower fs + * to interpret this in its own way. + */ + if (ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID)) + ia->ia_valid &= ~ATTR_MODE; + rc = notify_change(lower_dentry, ia); out: fsstack_copy_attr_all(inode, lower_inode); _