|
@@ -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, ×->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(×, 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) ||
|