Hi, I am working on adding xattr/attr support for landlock [1], so we can control fs accesses such as chmod, chown, uptimes, setxattr, etc.. inside landlock sandbox. the LSM hooks as following are invoved: 1.inode_setattr 2.inode_setxattr 3.inode_removexattr 4.inode_set_acl 5.inode_remove_acl which are controlled by LANDLOCK_ACCESS_FS_WRITE_METADATA. and 1.inode_getattr 2.inode_get_acl 3.inode_getxattr 4.inode_listxattr which are controlled by LANDLOCK_ACCESS_FS_READ_METADATA Some of these hooks only take struct dentry as a argument, However, for path-based LSMs such Landlock, Apparmor and Tomoyo, struct path instead of struct dentry required to make sense of attr/xattr accesses. So we need to refactor these hooks to take a struct path argument. This patchset only refators inode_setattr hook as part of whole work. Also, I have a problem about file_dentry() in __file_remove_privs() of the first patch, before changes in commit c1892c37769cf ("vfs: fix deadlock in file_remove_privs() on overlayfs"), it gets dentry and inode as belows: struct dentry *dentry = file->f_path.dentry; struct inode *inode = d_inode(dentry); That would be clear to change it to pass &file->f_path to __remove_privs()->notify_change()->inode_setattr(). After that commit, it has been changed to: struct dentry *dentry = file_dentry(file); struct inode *inode = file_inode(file); If I understand correctly, the dentry from file_dentry() maybe the upper or the lower, it can be different from file->f_path.dentry. It can't just go back to use &file->f_path otherwise the bug will come back for overlayfs. So for such scenario, how to get a path from file if the file maybe or not from overlayfs, and which kind of overlayfs path is ok for Landlock? Xiu Jianfeng (2): fs: Change notify_change() to take struct path argument lsm: Change inode_setattr hook to take struct path argument drivers/base/devtmpfs.c | 5 +++-- fs/attr.c | 7 ++++--- fs/cachefiles/interface.c | 4 ++-- fs/coredump.c | 2 +- fs/ecryptfs/inode.c | 18 +++++++++--------- fs/fat/file.c | 2 +- fs/inode.c | 8 +++++--- fs/ksmbd/smb2pdu.c | 6 +++--- fs/ksmbd/smbacl.c | 2 +- fs/namei.c | 2 +- fs/nfsd/vfs.c | 12 ++++++++---- fs/open.c | 19 ++++++++++--------- fs/overlayfs/overlayfs.h | 4 +++- fs/utimes.c | 2 +- include/linux/fs.h | 4 ++-- include/linux/lsm_hook_defs.h | 2 +- include/linux/security.h | 4 ++-- security/security.c | 10 +++++----- security/selinux/hooks.c | 3 ++- security/smack/smack_lsm.c | 5 +++-- 20 files changed, 67 insertions(+), 54 deletions(-) -- 2.17.1