]> git.baikalelectronics.ru Git - kernel.git/commitdiff
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:17:24 +0000 (11:17 +0200)
commit 9ff943c9925539529ee0a5f2b291cf40c1b44fb9 upstream.

Limit nanoseconds to 0..999999999.

Fixes: 2064844ee1ba ("[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 aa1d5cf1bc3a462be8a2365f870ad77ce2daa319..f3d712decb57c37127f9284262e1f62092ab114f 100644 (file)
@@ -162,6 +162,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 */