compat: generic compat get/settimeofday
Nothing arch specific in get/settimeofday. The details of the timeval conversion varied a little from arch to arch, but all with the same results. Also add an extern declaration for sys_tz to linux/time.h because externs in .c files are fowned upon. I'll kill the externs in various other files in a sparate patch. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: David S. Miller <davem@davemloft.net> [ sparc bits ] Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Ralf Baechle <ralf@linux-mips.org> Acked-by: Kyle McMartin <kyle@mcmartin.ca> Cc: Matthew Wilcox <matthew@wil.cx> Cc: Grant Grundler <grundler@parisc-linux.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
f7a5000f7a
commit
b418da16dd
@@ -133,72 +133,6 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
|
||||
return sys_ftruncate(fd, merge_64(a2, a3));
|
||||
}
|
||||
|
||||
static inline long
|
||||
get_tv32(struct timeval *o, struct compat_timeval __user *i)
|
||||
{
|
||||
return (!access_ok(VERIFY_READ, i, sizeof(*i)) ||
|
||||
(__get_user(o->tv_sec, &i->tv_sec) |
|
||||
__get_user(o->tv_usec, &i->tv_usec)));
|
||||
}
|
||||
|
||||
static inline long
|
||||
put_tv32(struct compat_timeval __user *o, struct timeval *i)
|
||||
{
|
||||
return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) ||
|
||||
(__put_user(i->tv_sec, &o->tv_sec) |
|
||||
__put_user(i->tv_usec, &o->tv_usec)));
|
||||
}
|
||||
|
||||
extern struct timezone sys_tz;
|
||||
|
||||
asmlinkage int
|
||||
sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
|
||||
{
|
||||
if (tv) {
|
||||
struct timeval ktv;
|
||||
do_gettimeofday(&ktv);
|
||||
if (put_tv32(tv, &ktv))
|
||||
return -EFAULT;
|
||||
}
|
||||
if (tz) {
|
||||
if (copy_to_user(tz, &sys_tz, sizeof(sys_tz)))
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
|
||||
{
|
||||
long usec;
|
||||
|
||||
if (!access_ok(VERIFY_READ, i, sizeof(*i)))
|
||||
return -EFAULT;
|
||||
if (__get_user(o->tv_sec, &i->tv_sec))
|
||||
return -EFAULT;
|
||||
if (__get_user(usec, &i->tv_usec))
|
||||
return -EFAULT;
|
||||
o->tv_nsec = usec * 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
asmlinkage int
|
||||
sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
|
||||
{
|
||||
struct timespec kts;
|
||||
struct timezone ktz;
|
||||
|
||||
if (tv) {
|
||||
if (get_ts32(&kts, tv))
|
||||
return -EFAULT;
|
||||
}
|
||||
if (tz) {
|
||||
if (copy_from_user(&ktz, tz, sizeof(ktz)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
|
||||
}
|
||||
|
||||
asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high,
|
||||
unsigned int offset_low, loff_t __user * result,
|
||||
unsigned int origin)
|
||||
|
@@ -214,7 +214,7 @@ EXPORT(sysn32_call_table)
|
||||
PTR sys_fchown
|
||||
PTR sys_lchown
|
||||
PTR sys_umask
|
||||
PTR sys32_gettimeofday
|
||||
PTR compat_sys_gettimeofday
|
||||
PTR compat_sys_getrlimit /* 6095 */
|
||||
PTR compat_sys_getrusage
|
||||
PTR compat_sys_sysinfo
|
||||
@@ -279,7 +279,7 @@ EXPORT(sysn32_call_table)
|
||||
PTR sys_chroot
|
||||
PTR sys_sync
|
||||
PTR sys_acct
|
||||
PTR sys32_settimeofday
|
||||
PTR compat_sys_settimeofday
|
||||
PTR compat_sys_mount /* 6160 */
|
||||
PTR sys_umount
|
||||
PTR sys_swapon
|
||||
|
@@ -283,8 +283,8 @@ sys_call_table:
|
||||
PTR compat_sys_setrlimit /* 4075 */
|
||||
PTR compat_sys_getrlimit
|
||||
PTR compat_sys_getrusage
|
||||
PTR sys32_gettimeofday
|
||||
PTR sys32_settimeofday
|
||||
PTR compat_sys_gettimeofday
|
||||
PTR compat_sys_settimeofday
|
||||
PTR sys_getgroups /* 4080 */
|
||||
PTR sys_setgroups
|
||||
PTR sys_ni_syscall /* old_select */
|
||||
|
Reference in New Issue
Block a user