diff options
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; | 
