mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 06:10:56 +00:00
time: Move compat_time()/stime() to native
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: John Stultz <john.stultz@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20170607084241.28657-15-viro@ZenIV.linux.org.uk
This commit is contained in:
parent
2482097c6c
commit
b180db2c8c
2 changed files with 41 additions and 40 deletions
|
@ -739,46 +739,6 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __ARCH_WANT_COMPAT_SYS_TIME
|
|
||||||
|
|
||||||
/* compat_time_t is a 32 bit "long" and needs to get converted. */
|
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(time, compat_time_t __user *, tloc)
|
|
||||||
{
|
|
||||||
compat_time_t i;
|
|
||||||
struct timeval tv;
|
|
||||||
|
|
||||||
do_gettimeofday(&tv);
|
|
||||||
i = tv.tv_sec;
|
|
||||||
|
|
||||||
if (tloc) {
|
|
||||||
if (put_user(i,tloc))
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
|
||||||
force_successful_syscall_return();
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
COMPAT_SYSCALL_DEFINE1(stime, compat_time_t __user *, tptr)
|
|
||||||
{
|
|
||||||
struct timespec tv;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (get_user(tv.tv_sec, tptr))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
tv.tv_nsec = 0;
|
|
||||||
|
|
||||||
err = security_settime(&tv, NULL);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
do_settimeofday(&tv);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __ARCH_WANT_COMPAT_SYS_TIME */
|
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages,
|
COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages,
|
||||||
compat_uptr_t __user *, pages32,
|
compat_uptr_t __user *, pages32,
|
||||||
|
|
|
@ -100,6 +100,47 @@ SYSCALL_DEFINE1(stime, time_t __user *, tptr)
|
||||||
|
|
||||||
#endif /* __ARCH_WANT_SYS_TIME */
|
#endif /* __ARCH_WANT_SYS_TIME */
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
#ifdef __ARCH_WANT_COMPAT_SYS_TIME
|
||||||
|
|
||||||
|
/* compat_time_t is a 32 bit "long" and needs to get converted. */
|
||||||
|
COMPAT_SYSCALL_DEFINE1(time, compat_time_t __user *, tloc)
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
compat_time_t i;
|
||||||
|
|
||||||
|
do_gettimeofday(&tv);
|
||||||
|
i = tv.tv_sec;
|
||||||
|
|
||||||
|
if (tloc) {
|
||||||
|
if (put_user(i,tloc))
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
force_successful_syscall_return();
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPAT_SYSCALL_DEFINE1(stime, compat_time_t __user *, tptr)
|
||||||
|
{
|
||||||
|
struct timespec tv;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (get_user(tv.tv_sec, tptr))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
tv.tv_nsec = 0;
|
||||||
|
|
||||||
|
err = security_settime(&tv, NULL);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
do_settimeofday(&tv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* __ARCH_WANT_COMPAT_SYS_TIME */
|
||||||
|
#endif
|
||||||
|
|
||||||
SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
|
SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv,
|
||||||
struct timezone __user *, tz)
|
struct timezone __user *, tz)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue