fuse: limit nsec
[sfrench/cifs-2.6.git] / 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 */