[ Sasha's backport helper bot ]
Hi,
✅ All tests passed successfully. No issues detected. No action required from the submitter.
The upstream commit SHA1 provided is correct: 47b5c64d0ab5e7136db2b78c6ec710e0d8a5a36b
WARNING: Author mismatch between patch and upstream commit: Backport author: Qingfang Dengdqfext@gmail.com Commit author: Ian Kentraven@themaw.net
Status in newer kernel trees: 6.14.y | Present (exact SHA1) 6.12.y | Present (exact SHA1) 6.6.y | Present (exact SHA1) 6.1.y | Present (exact SHA1) 5.15.y | Present (exact SHA1)
Note: The patch differs from the upstream commit: --- 1: 47b5c64d0ab5e ! 1: 3ab6e3573bab5 kernfs: use i_lock to protect concurrent inode updates @@ Metadata ## Commit message ## kernfs: use i_lock to protect concurrent inode updates
+ Commit 47b5c64d0ab5e7136db2b78c6ec710e0d8a5a36b upstream. + The inode operations .permission() and .getattr() use the kernfs node write lock but all that's needed is the read lock to protect against partial updates of these kernfs node fields which are all done under @@ Commit message Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org
## fs/kernfs/inode.c ## -@@ fs/kernfs/inode.c: int kernfs_iop_getattr(struct user_namespace *mnt_userns, +@@ fs/kernfs/inode.c: int kernfs_iop_getattr(const struct path *path, struct kstat *stat, struct inode *inode = d_inode(path->dentry); struct kernfs_node *kn = inode->i_private;
@@ fs/kernfs/inode.c: int kernfs_iop_getattr(struct user_namespace *mnt_userns, kernfs_refresh_inode(kn, inode); - up_write(&kernfs_rwsem); - - generic_fillattr(&init_user_ns, inode, stat); + generic_fillattr(inode, stat); + spin_unlock(&inode->i_lock); + up_read(&kernfs_rwsem); + return 0; }
-@@ fs/kernfs/inode.c: int kernfs_iop_permission(struct user_namespace *mnt_userns, - struct inode *inode, int mask) +@@ fs/kernfs/inode.c: void kernfs_evict_inode(struct inode *inode) + int kernfs_iop_permission(struct inode *inode, int mask) { struct kernfs_node *kn; + int ret; @@ fs/kernfs/inode.c: int kernfs_iop_permission(struct user_namespace *mnt_userns, + spin_lock(&inode->i_lock); kernfs_refresh_inode(kn, inode); - up_write(&kernfs_rwsem); -+ ret = generic_permission(&init_user_ns, inode, mask); ++ ret = generic_permission(inode, mask); + spin_unlock(&inode->i_lock); + up_read(&kernfs_rwsem);
-- return generic_permission(&init_user_ns, inode, mask); +- return generic_permission(inode, mask); + return ret; }
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Success |