fuse: limit nsec
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 21 Jul 2022 14:06:18 +0000 (16:06 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 21 Jul 2022 14:06:18 +0000 (16:06 +0200)
Limit nanoseconds to 0..999999999.

Fixes: d8a5ba45457e ("[PATCH] FUSE - core")
Cc: <stable@vger.kernel.org>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/inode.c

index 8c0665c5dff8818b4a9ff17fa26c2d7a18052672..7c290089e693ec508a92d3eeaeff35d71195938b 100644 (file)
@@ -180,6 +180,12 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
        inode->i_uid     = make_kuid(fc->user_ns, attr->uid);
        inode->i_gid     = make_kgid(fc->user_ns, attr->gid);
        inode->i_blocks  = attr->blocks;
+
+       /* Sanitize nsecs */
+       attr->atimensec = min_t(u32, attr->atimensec, NSEC_PER_SEC - 1);
+       attr->mtimensec = min_t(u32, attr->mtimensec, NSEC_PER_SEC - 1);
+       attr->ctimensec = min_t(u32, attr->ctimensec, NSEC_PER_SEC - 1);
+
        inode->i_atime.tv_sec   = attr->atime;
        inode->i_atime.tv_nsec  = attr->atimensec;
        /* mtime from server may be stale due to local buffered write */