mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
time: Enable get/put_compat_itimerspec64 always
This will aid in enabling the compat syscalls on 32-bit architectures later on. Also move compat_itimerspec and related defines to compat_time.h. The compat_time.h file will eventually be deleted. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: arnd@arndb.de Cc: viro@zeniv.linux.org.uk Cc: linux-fsdevel@vger.kernel.org Cc: linux-api@vger.kernel.org Cc: y2038@lists.linaro.org Link: https://lkml.kernel.org/r/20180617051144.29756-3-deepa.kernel@gmail.com
This commit is contained in:
parent
d0dd63a8ae
commit
afef05cf23
@ -109,11 +109,6 @@ typedef compat_ulong_t compat_aio_context_t;
|
|||||||
struct compat_sel_arg_struct;
|
struct compat_sel_arg_struct;
|
||||||
struct rusage;
|
struct rusage;
|
||||||
|
|
||||||
struct compat_itimerspec {
|
|
||||||
struct compat_timespec it_interval;
|
|
||||||
struct compat_timespec it_value;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct compat_utimbuf {
|
struct compat_utimbuf {
|
||||||
compat_time_t actime;
|
compat_time_t actime;
|
||||||
compat_time_t modtime;
|
compat_time_t modtime;
|
||||||
@ -294,10 +289,6 @@ extern int compat_get_timespec(struct timespec *, const void __user *);
|
|||||||
extern int compat_put_timespec(const struct timespec *, void __user *);
|
extern int compat_put_timespec(const struct timespec *, void __user *);
|
||||||
extern int compat_get_timeval(struct timeval *, const void __user *);
|
extern int compat_get_timeval(struct timeval *, const void __user *);
|
||||||
extern int compat_put_timeval(const struct timeval *, void __user *);
|
extern int compat_put_timeval(const struct timeval *, void __user *);
|
||||||
extern int get_compat_itimerspec64(struct itimerspec64 *its,
|
|
||||||
const struct compat_itimerspec __user *uits);
|
|
||||||
extern int put_compat_itimerspec64(const struct itimerspec64 *its,
|
|
||||||
struct compat_itimerspec __user *uits);
|
|
||||||
|
|
||||||
struct compat_iovec {
|
struct compat_iovec {
|
||||||
compat_uptr_t iov_base;
|
compat_uptr_t iov_base;
|
||||||
|
@ -17,7 +17,16 @@ struct compat_timeval {
|
|||||||
s32 tv_usec;
|
s32 tv_usec;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct compat_itimerspec {
|
||||||
|
struct compat_timespec it_interval;
|
||||||
|
struct compat_timespec it_value;
|
||||||
|
};
|
||||||
|
|
||||||
extern int compat_get_timespec64(struct timespec64 *, const void __user *);
|
extern int compat_get_timespec64(struct timespec64 *, const void __user *);
|
||||||
extern int compat_put_timespec64(const struct timespec64 *, void __user *);
|
extern int compat_put_timespec64(const struct timespec64 *, void __user *);
|
||||||
|
extern int get_compat_itimerspec64(struct itimerspec64 *its,
|
||||||
|
const struct compat_itimerspec __user *uits);
|
||||||
|
extern int put_compat_itimerspec64(const struct itimerspec64 *its,
|
||||||
|
struct compat_itimerspec __user *uits);
|
||||||
|
|
||||||
#endif /* _LINUX_COMPAT_TIME_H */
|
#endif /* _LINUX_COMPAT_TIME_H */
|
||||||
|
@ -324,35 +324,6 @@ COMPAT_SYSCALL_DEFINE3(sched_getaffinity, compat_pid_t, pid, unsigned int, len,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Todo: Delete these extern declarations when get/put_compat_itimerspec64()
|
|
||||||
* are moved to kernel/time/time.c .
|
|
||||||
*/
|
|
||||||
extern int __compat_get_timespec64(struct timespec64 *ts64,
|
|
||||||
const struct compat_timespec __user *cts);
|
|
||||||
extern int __compat_put_timespec64(const struct timespec64 *ts64,
|
|
||||||
struct compat_timespec __user *cts);
|
|
||||||
|
|
||||||
int get_compat_itimerspec64(struct itimerspec64 *its,
|
|
||||||
const struct compat_itimerspec __user *uits)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (__compat_get_timespec64(&its->it_interval, &uits->it_interval) ||
|
|
||||||
__compat_get_timespec64(&its->it_value, &uits->it_value))
|
|
||||||
return -EFAULT;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(get_compat_itimerspec64);
|
|
||||||
|
|
||||||
int put_compat_itimerspec64(const struct itimerspec64 *its,
|
|
||||||
struct compat_itimerspec __user *uits)
|
|
||||||
{
|
|
||||||
if (__compat_put_timespec64(&its->it_interval, &uits->it_interval) ||
|
|
||||||
__compat_put_timespec64(&its->it_value, &uits->it_value))
|
|
||||||
return -EFAULT;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(put_compat_itimerspec64);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We currently only need the following fields from the sigevent
|
* We currently only need the following fields from the sigevent
|
||||||
* structure: sigev_value, sigev_signo, sig_notify and (sometimes
|
* structure: sigev_value, sigev_signo, sig_notify and (sometimes
|
||||||
|
@ -955,3 +955,24 @@ int put_itimerspec64(const struct itimerspec64 *it,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(put_itimerspec64);
|
EXPORT_SYMBOL_GPL(put_itimerspec64);
|
||||||
|
|
||||||
|
int get_compat_itimerspec64(struct itimerspec64 *its,
|
||||||
|
const struct compat_itimerspec __user *uits)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (__compat_get_timespec64(&its->it_interval, &uits->it_interval) ||
|
||||||
|
__compat_get_timespec64(&its->it_value, &uits->it_value))
|
||||||
|
return -EFAULT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(get_compat_itimerspec64);
|
||||||
|
|
||||||
|
int put_compat_itimerspec64(const struct itimerspec64 *its,
|
||||||
|
struct compat_itimerspec __user *uits)
|
||||||
|
{
|
||||||
|
if (__compat_put_timespec64(&its->it_interval, &uits->it_interval) ||
|
||||||
|
__compat_put_timespec64(&its->it_value, &uits->it_value))
|
||||||
|
return -EFAULT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(put_compat_itimerspec64);
|
||||||
|
Loading…
Reference in New Issue
Block a user