@@ -1861,7 +1861,7 @@ static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid)
}
static long do_semtimedop(int semid, struct sembuf __user *tsops,
- unsigned nsops, const struct timespec *timeout)
+ unsigned nsops, const struct timespec64 *timeout)
{
int error = -EINVAL;
struct sem_array *sma;
@@ -1897,7 +1897,7 @@ static long do_semtimedop(int semid, struct sembuf __user *tsops,
error = -EINVAL;
goto out_free;
}
- jiffies_left = timespec_to_jiffies(timeout);
+ jiffies_left = timespec64_to_jiffies(timeout);
}
max = 0;
@@ -2116,8 +2116,8 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
unsigned, nsops, const struct timespec __user *, timeout)
{
if (timeout) {
- struct timespec ts;
- if (copy_from_user(&ts, timeout, sizeof(*timeout)))
+ struct timespec64 ts;
+ if (get_timespec64(&ts, timeout))
return -EFAULT;
return do_semtimedop(semid, tsops, nsops, &ts);
}
@@ -2130,8 +2130,8 @@ COMPAT_SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsems,
const struct compat_timespec __user *, timeout)
{
if (timeout) {
- struct timespec ts;
- if (compat_get_timespec(&ts, timeout))
+ struct timespec64 ts;
+ if (compat_get_timespec64(&ts, timeout))
return -EFAULT;
return do_semtimedop(semid, tsems, nsops, &ts);
}