[PATCH] [-next] fuse: Conditionally fill kstat in fuse_do_statx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The code path

fuse_update_attributes
    fuse_update_get_attr
        fuse_do_statx

has the risk to use a NULL pointer for struct kstat *stat,
although current callers of fuse_update_attributes
only set request_mask to values that will trigger
the call of fuse_do_getattr, which already handles the NULL
pointer. Future updates might miss that fuse_do_statx does
not handle it - it is safer to add a condition already
right now.

Signed-off-by: Bernd Schubert <bschubert@xxxxxxx>
Cc: Miklos Szeredi <miklos@xxxxxxxxxx>
Cc: Dharmendra Singh <dsingh@xxxxxxx>
Cc: linux-fsdevel@xxxxxxxxxxxxxxx
---
 fs/fuse/dir.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index e190d09f220d..01e78d746338 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1219,11 +1219,15 @@ static int fuse_do_statx(struct inode *inode, struct file *file,
 		fuse_change_attributes(inode, &attr, &outarg.stat,
 				       ATTR_TIMEOUT(&outarg), attr_version);
 	}
-	stat->result_mask = sx->mask & (STATX_BASIC_STATS | STATX_BTIME);
-	stat->btime.tv_sec = sx->btime.tv_sec;
-	stat->btime.tv_nsec = min_t(u32, sx->btime.tv_nsec, NSEC_PER_SEC - 1);
-	fuse_fillattr(inode, &attr, stat);
-	stat->result_mask |= STATX_TYPE;
+
+	if (stat) {
+		stat->result_mask = sx->mask & (STATX_BASIC_STATS | STATX_BTIME);
+		stat->btime.tv_sec = sx->btime.tv_sec;
+		stat->btime.tv_nsec = min_t(u32, sx->btime.tv_nsec,
+					    NSEC_PER_SEC - 1);
+		fuse_fillattr(inode, &attr, stat);
+		stat->result_mask |= STATX_TYPE;
+	}
 
 	return 0;
 }
-- 
2.34.1




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux