Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timekeeping updates from Thomas Gleixner: "The timers and timekeeping departement provides: - Another large y2038 update with further preparations for providing the y2038 safe timespecs closer to the syscalls. - An overhaul of the SHCMT clocksource driver - SPDX license identifier updates - Small cleanups and fixes all over the place" * 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (31 commits) tick/sched : Remove redundant cpu_online() check clocksource/drivers/dw_apb: Add reset control clocksource: Remove obsolete CLOCKSOURCE_OF_DECLARE clocksource/drivers: Unify the names to timer-* format clocksource/drivers/sh_cmt: Add R-Car gen3 support dt-bindings: timer: renesas: cmt: document R-Car gen3 support clocksource/drivers/sh_cmt: Properly line-wrap sh_cmt_of_table[] initializer clocksource/drivers/sh_cmt: Fix clocksource width for 32-bit machines clocksource/drivers/sh_cmt: Fixup for 64-bit machines clocksource/drivers/sh_tmu: Convert to SPDX identifiers clocksource/drivers/sh_mtu2: Convert to SPDX identifiers clocksource/drivers/sh_cmt: Convert to SPDX identifiers clocksource/drivers/renesas-ostm: Convert to SPDX identifiers clocksource: Convert to using %pOFn instead of device_node.name tick/broadcast: Remove redundant check RISC-V: Request newstat syscalls y2038: signal: Change rt_sigtimedwait to use __kernel_timespec y2038: socket: Change recvmmsg to use __kernel_timespec y2038: sched: Change sched_rr_get_interval to use __kernel_timespec y2038: utimes: Rework #ifdef guards for compat syscalls ...
This commit is contained in:
@@ -3165,7 +3165,7 @@ int copy_siginfo_from_user32(struct kernel_siginfo *to,
|
||||
* @ts: upper bound on process time suspension
|
||||
*/
|
||||
static int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info,
|
||||
const struct timespec *ts)
|
||||
const struct timespec64 *ts)
|
||||
{
|
||||
ktime_t *to = NULL, timeout = KTIME_MAX;
|
||||
struct task_struct *tsk = current;
|
||||
@@ -3173,9 +3173,9 @@ static int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info,
|
||||
int sig, ret = 0;
|
||||
|
||||
if (ts) {
|
||||
if (!timespec_valid(ts))
|
||||
if (!timespec64_valid(ts))
|
||||
return -EINVAL;
|
||||
timeout = timespec_to_ktime(*ts);
|
||||
timeout = timespec64_to_ktime(*ts);
|
||||
to = &timeout;
|
||||
}
|
||||
|
||||
@@ -3223,11 +3223,12 @@ static int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info,
|
||||
* @sigsetsize: size of sigset_t type
|
||||
*/
|
||||
SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
|
||||
siginfo_t __user *, uinfo, const struct timespec __user *, uts,
|
||||
siginfo_t __user *, uinfo,
|
||||
const struct __kernel_timespec __user *, uts,
|
||||
size_t, sigsetsize)
|
||||
{
|
||||
sigset_t these;
|
||||
struct timespec ts;
|
||||
struct timespec64 ts;
|
||||
kernel_siginfo_t info;
|
||||
int ret;
|
||||
|
||||
@@ -3239,7 +3240,7 @@ SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
|
||||
return -EFAULT;
|
||||
|
||||
if (uts) {
|
||||
if (copy_from_user(&ts, uts, sizeof(ts)))
|
||||
if (get_timespec64(&ts, uts))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
@@ -3256,10 +3257,10 @@ SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
|
||||
#ifdef CONFIG_COMPAT
|
||||
COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese,
|
||||
struct compat_siginfo __user *, uinfo,
|
||||
struct compat_timespec __user *, uts, compat_size_t, sigsetsize)
|
||||
struct old_timespec32 __user *, uts, compat_size_t, sigsetsize)
|
||||
{
|
||||
sigset_t s;
|
||||
struct timespec t;
|
||||
struct timespec64 t;
|
||||
kernel_siginfo_t info;
|
||||
long ret;
|
||||
|
||||
@@ -3270,7 +3271,7 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese,
|
||||
return -EFAULT;
|
||||
|
||||
if (uts) {
|
||||
if (compat_get_timespec(&t, uts))
|
||||
if (get_old_timespec32(&t, uts))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user