diff options
author | marks <none@none> | 2008-02-22 08:41:57 -0800 |
---|---|---|
committer | marks <none@none> | 2008-02-22 08:41:57 -0800 |
commit | 931293416c5362b3d50b217b4390d1c88f7c7500 (patch) | |
tree | e9d58a163f1581c84cb558e2e205c22afc473ce8 /usr/src | |
parent | 82c6b8c665c7ab56878da3140ddcb452dbc040b4 (diff) | |
download | illumos-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.c | 14 |
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; |