[parch 1/4] vfs: utimensat(): ignore tv_sec if tv_nsec == UTIME_OMIT or UTIME_NOW

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Andrew Morton <akpm@...>
Cc: lkml <linux-kernel@...>, Christoph Hellwig <hch@...>, Miklos Szeredi <miklos@...>, Al Viro <viro@...>, <jamie@...>, Ulrich Drepper <drepper@...>, <linux-fsdevel@...>, Subrata Modak <subrata@...>
Date: Tuesday, June 3, 2008 - 6:24 pm

The POSIX.1 draft spec for utimensat() says that if a times[n].tv_nsec
field is UTIME_OMIT or UTIME_NOW, then the value in the corresponding
tv_sec field is ignored.  However the current Linux implementation
requires the tv_sec value to be zero (or the EINVAL error results).
This requirement should be removed.

CC: Miklos Szeredi <miklos@szeredi.hu>
CC: Al Viro <viro@zeniv.linux.org.uk>
CC: Ulrich Drepper <drepper@redhat.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>

--- linux-2.6.26-rc4/fs/utimes.c	2008-06-03 22:43:15.000000000 +0200
+++ linux-2.6.26-rc4-utimensat-fix-v4/fs/utimes.c	2008-06-03 22:41:50.000000000 +0200
@@ -169,14 +169,6 @@
 	if (utimes) {
 		if (copy_from_user(&tstimes, utimes, sizeof(tstimes)))
 			return -EFAULT;
-		if ((tstimes[0].tv_nsec == UTIME_OMIT ||
-		     tstimes[0].tv_nsec == UTIME_NOW) &&
-		    tstimes[0].tv_sec != 0)
-			return -EINVAL;
-		if ((tstimes[1].tv_nsec == UTIME_OMIT ||
-		     tstimes[1].tv_nsec == UTIME_NOW) &&
-		    tstimes[1].tv_sec != 0)
-			return -EINVAL;

 		/* Nothing to do, we must not even check the path.  */
 		if (tstimes[0].tv_nsec == UTIME_OMIT &&

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[parch 1/4] vfs: utimensat(): ignore tv_sec if tv_nsec == UT..., Michael Kerrisk, (Tue Jun 3, 6:24 pm)