Message ID | 20230823223345.2775761-1-bschubert@ddn.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [-next] fuse: Conditionally fill kstat in fuse_do_statx | expand |
On Thu, 24 Aug 2023 at 00:34, Bernd Schubert <bschubert@ddn.com> wrote: > > 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@ddn.com> Applied, thanks. Miklos
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; }
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@ddn.com> Cc: Miklos Szeredi <miklos@szeredi.hu> Cc: Dharmendra Singh <dsingh@ddn.com> Cc: linux-fsdevel@vger.kernel.org --- fs/fuse/dir.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)