Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fuse: fix revalidation of attributes for permission check

fuse_invalidate_attr() now sets fi->inval_mask instead of fi->i_time, hence
we need to check the inval mask in fuse_permission() as well.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: 2f1e81965fd0 ("fuse: allow fine grained attr cache invaldation")

+3 -1
+3 -1
fs/fuse/dir.c
··· 1119 1119 if (fc->default_permissions || 1120 1120 ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) { 1121 1121 struct fuse_inode *fi = get_fuse_inode(inode); 1122 + u32 perm_mask = STATX_MODE | STATX_UID | STATX_GID; 1122 1123 1123 - if (time_before64(fi->i_time, get_jiffies_64())) { 1124 + if (perm_mask & READ_ONCE(fi->inval_mask) || 1125 + time_before64(fi->i_time, get_jiffies_64())) { 1124 1126 refreshed = true; 1125 1127 1126 1128 err = fuse_perm_getattr(inode, mask);