fuse: limit nsec
authorMiklos Szeredi <mszeredi@redhat.com>
Thu, 21 Jul 2022 14:06:18 +0000 (16:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Aug 2022 09:11:12 +0000 (11:11 +0200)
commit 47912eaa061a6a81e4aa790591a1874c650733c0 upstream.

Limit nanoseconds to 0..999999999.

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

index 747f7a710fb980190dacc29f26bad62b6a8bb30e..225b4419831e963757f8f4017cbe3e81d0d31540 100644 (file)
@@ -174,6 +174,12 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,
        inode->i_uid     = make_kuid(&init_user_ns, attr->uid);
        inode->i_gid     = make_kgid(&init_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 */