summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authormarks <none@none>2008-02-22 08:41:57 -0800
committermarks <none@none>2008-02-22 08:41:57 -0800
commit931293416c5362b3d50b217b4390d1c88f7c7500 (patch)
treee9d58a163f1581c84cb558e2e205c22afc473ce8 /usr/src
parent82c6b8c665c7ab56878da3140ddcb452dbc040b4 (diff)
downloadillumos-gate-931293416c5362b3d50b217b4390d1c88f7c7500.tar.gz
6629604 ZFS: lstat64() on ZFS file returns EOVERFLOW
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_vnops.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c
index 811115fd00..d94dbea28e 100644
--- a/usr/src/uts/common/fs/zfs/zfs_vnops.c
+++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c
@@ -2409,6 +2409,20 @@ zfs_setattr(vnode_t *vp, vattr_t *vap, int flags, cred_t *cr,
return (EPERM);
}
+ /*
+ * Verify timestamps doesn't overflow 32 bits.
+ * ZFS can handle large timestamps, but 32bit syscalls can't
+ * handle times greater than 2039. This check should be removed
+ * once large timestamps are fully supported.
+ */
+ if (mask & (AT_ATIME | AT_MTIME)) {
+ if (((mask & AT_ATIME) && TIMESPEC_OVERFLOW(&vap->va_atime)) ||
+ ((mask & AT_MTIME) && TIMESPEC_OVERFLOW(&vap->va_mtime))) {
+ ZFS_EXIT(zfsvfs);
+ return (EOVERFLOW);
+ }
+ }
+
top:
attrzp = NULL;