Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[sfrench/cifs-2.6.git] / fs / utimes.c
index 6571d8c848a04054e7517f7ad29b55d5b9022232..51edb9f9507c409269dd8722a6c49303ef926f84 100644 (file)
@@ -22,7 +22,7 @@
  */
 SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times)
 {
-       struct timespec tv[2];
+       struct timespec64 tv[2];
 
        if (times) {
                if (get_user(tv[0].tv_sec, &times->actime) ||
@@ -44,7 +44,7 @@ static bool nsec_valid(long nsec)
        return nsec >= 0 && nsec <= 999999999;
 }
 
-static int utimes_common(const struct path *path, struct timespec *times)
+static int utimes_common(const struct path *path, struct timespec64 *times)
 {
        int error;
        struct iattr newattrs;
@@ -115,7 +115,7 @@ out:
  * must be owner or have write permission.
  * Else, update from *times, must be owner or super user.
  */
-long do_utimes(int dfd, const char __user *filename, struct timespec *times,
+long do_utimes(int dfd, const char __user *filename, struct timespec64 *times,
               int flags)
 {
        int error = -EINVAL;
@@ -167,10 +167,11 @@ out:
 SYSCALL_DEFINE4(utimensat, int, dfd, const char __user *, filename,
                struct timespec __user *, utimes, int, flags)
 {
-       struct timespec tstimes[2];
+       struct timespec64 tstimes[2];
 
        if (utimes) {
-               if (copy_from_user(&tstimes, utimes, sizeof(tstimes)))
+               if ((get_timespec64(&tstimes[0], &utimes[0]) ||
+                       get_timespec64(&tstimes[1], &utimes[1])))
                        return -EFAULT;
 
                /* Nothing to do, we must not even check the path.  */
@@ -186,7 +187,7 @@ SYSCALL_DEFINE3(futimesat, int, dfd, const char __user *, filename,
                struct timeval __user *, utimes)
 {
        struct timeval times[2];
-       struct timespec tstimes[2];
+       struct timespec64 tstimes[2];
 
        if (utimes) {
                if (copy_from_user(&times, utimes, sizeof(times)))
@@ -224,7 +225,7 @@ SYSCALL_DEFINE2(utimes, char __user *, filename,
 COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename,
                       struct compat_utimbuf __user *, t)
 {
-       struct timespec tv[2];
+       struct timespec64 tv[2];
 
        if (t) {
                if (get_user(tv[0].tv_sec, &t->actime) ||
@@ -238,11 +239,11 @@ COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename,
 
 COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filename, struct compat_timespec __user *, t, int, flags)
 {
-       struct timespec tv[2];
+       struct timespec64 tv[2];
 
        if  (t) {
-               if (compat_get_timespec(&tv[0], &t[0]) ||
-                   compat_get_timespec(&tv[1], &t[1]))
+               if (compat_get_timespec64(&tv[0], &t[0]) ||
+                   compat_get_timespec64(&tv[1], &t[1]))
                        return -EFAULT;
 
                if (tv[0].tv_nsec == UTIME_OMIT && tv[1].tv_nsec == UTIME_OMIT)
@@ -253,7 +254,7 @@ COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filena
 
 COMPAT_SYSCALL_DEFINE3(futimesat, unsigned int, dfd, const char __user *, filename, struct compat_timeval __user *, t)
 {
-       struct timespec tv[2];
+       struct timespec64 tv[2];
 
        if (t) {
                if (get_user(tv[0].tv_sec, &t[0].tv_sec) ||