From: tip-bot for Al Viro <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: peterz@infradead.org, john.stultz@linaro.org, tglx@linutronix.de,
hpa@zytor.com, linux-kernel@vger.kernel.org, mingo@kernel.org,
viro@zeniv.linux.org.uk
Subject: [tip:timers/core] posix-timers: Take compat timer_gettime(2) to native one
Date: Tue, 13 Jun 2017 15:09:39 -0700 [thread overview]
Message-ID: <tip-b0dc12426ec404de99d7e75a12a22d9201d90914@git.kernel.org> (raw)
In-Reply-To: <20170607084241.28657-11-viro@ZenIV.linux.org.uk>
Commit-ID: b0dc12426ec404de99d7e75a12a22d9201d90914
Gitweb: http://git.kernel.org/tip/b0dc12426ec404de99d7e75a12a22d9201d90914
Author: Al Viro <viro@zeniv.linux.org.uk>
AuthorDate: Wed, 7 Jun 2017 09:42:36 +0100
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 14 Jun 2017 00:00:43 +0200
posix-timers: Take compat timer_gettime(2) to native one
... and get rid of set_fs() in there
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-11-viro@ZenIV.linux.org.uk
---
kernel/compat.c | 17 -----------------
kernel/time/posix-stubs.c | 1 +
kernel/time/posix-timers.c | 43 ++++++++++++++++++++++++++++++++++---------
3 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/kernel/compat.c b/kernel/compat.c
index df39e2e..1fb8cf7 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -635,23 +635,6 @@ COMPAT_SYSCALL_DEFINE3(timer_create, clockid_t, which_clock,
return sys_timer_create(which_clock, event, created_timer_id);
}
-COMPAT_SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
- struct compat_itimerspec __user *, setting)
-{
- long err;
- mm_segment_t oldfs;
- struct itimerspec ts;
-
- oldfs = get_fs();
- set_fs(KERNEL_DS);
- err = sys_timer_gettime(timer_id,
- (struct itimerspec __user *) &ts);
- set_fs(oldfs);
- if (!err && put_compat_itimerspec(setting, &ts))
- return -EFAULT;
- return err;
-}
-
COMPAT_SYSCALL_DEFINE2(clock_settime, clockid_t, which_clock,
struct compat_timespec __user *, tp)
{
diff --git a/kernel/time/posix-stubs.c b/kernel/time/posix-stubs.c
index ad263df..f4a1962 100644
--- a/kernel/time/posix-stubs.c
+++ b/kernel/time/posix-stubs.c
@@ -43,6 +43,7 @@ SYS_NI(alarm);
#endif
COMPAT_SYS_NI(clock_adjtime);
COMPAT_SYS_NI(timer_settime);
+COMPAT_SYS_NI(timer_gettime);
/*
* We preserve minimal support for CLOCK_REALTIME and CLOCK_MONOTONIC
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index a73feac..e82bb1f 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -690,11 +690,8 @@ void common_timer_get(struct k_itimer *timr, struct itimerspec64 *cur_setting)
}
/* Get the time remaining on a POSIX.1b interval timer. */
-SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
- struct itimerspec __user *, setting)
+static int do_timer_gettime(timer_t timer_id, struct itimerspec64 *setting)
{
- struct itimerspec64 cur_setting64;
- struct itimerspec cur_setting;
struct k_itimer *timr;
const struct k_clock *kc;
unsigned long flags;
@@ -704,21 +701,49 @@ SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
if (!timr)
return -EINVAL;
- memset(&cur_setting64, 0, sizeof(cur_setting64));
+ memset(setting, 0, sizeof(*setting));
kc = timr->kclock;
if (WARN_ON_ONCE(!kc || !kc->timer_get))
ret = -EINVAL;
else
- kc->timer_get(timr, &cur_setting64);
+ kc->timer_get(timr, setting);
unlock_timer(timr, flags);
+ return ret;
+}
- cur_setting = itimerspec64_to_itimerspec(&cur_setting64);
- if (!ret && copy_to_user(setting, &cur_setting, sizeof (cur_setting)))
- return -EFAULT;
+/* Get the time remaining on a POSIX.1b interval timer. */
+SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
+ struct itimerspec __user *, setting)
+{
+ struct itimerspec64 cur_setting64;
+ int ret = do_timer_gettime(timer_id, &cur_setting64);
+ if (!ret) {
+ struct itimerspec cur_setting;
+ cur_setting = itimerspec64_to_itimerspec(&cur_setting64);
+ if (copy_to_user(setting, &cur_setting, sizeof (cur_setting)))
+ ret = -EFAULT;
+ }
+ return ret;
+}
+
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id,
+ struct compat_itimerspec __user *, setting)
+{
+ struct itimerspec64 cur_setting64;
+
+ int ret = do_timer_gettime(timer_id, &cur_setting64);
+ if (!ret) {
+ struct itimerspec cur_setting;
+ cur_setting = itimerspec64_to_itimerspec(&cur_setting64);
+ if (put_compat_itimerspec(setting, &cur_setting))
+ ret = -EFAULT;
+ }
return ret;
}
+#endif
/*
* Get the number of overruns of a POSIX.1b interval timer. This is to
next prev parent reply other threads:[~2017-06-13 22:13 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-07 8:41 [PATCHSET] sanitizing compat nanosleep and other timer-related syscalls Al Viro
2017-06-07 8:42 ` [PATCH 01/16] move copyout of timespec into do_cpu_nanosleep() Al Viro
2017-06-07 8:42 ` [PATCH 02/16] move copyout and freeze handling into alarmtimer_do_nsleep() Al Viro
2017-06-13 22:04 ` [tip:timers/core] alarmtimer: Move " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 03/16] hrtimer_nanosleep(): pass rmtp in restart_block Al Viro
2017-06-13 22:05 ` [tip:timers/core] hrtimer_nanosleep(): Pass " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 04/16] move copyout to do_nanosleel() Al Viro
2017-06-13 22:05 ` [tip:timers/core] hrtimer: Move copyout of remaining time to do_nanosleep() tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 05/16] clock_nanosleep(): stash rmtp into restart_block Al Viro
2017-06-13 22:06 ` [tip:timers/core] posix-timers: Store rmtp into restart_block in sys_clock_nanosleep() tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 06/16] nanosleep/clock_nanosleep: teach to do compat copyouts Al Viro
2017-06-07 10:07 ` Peter Zijlstra
2017-06-13 22:06 ` [tip:timers/core] time/posix-timers: Move the compat copyouts to the nanosleep implementations tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 07/16] {clock_,}nanosleep(2): merge timespec copyout logics into a new helper Al Viro
2017-06-13 22:07 ` [tip:timers/core] hrtimers/posix-timers: Merge nanosleep " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 08/16] kill ->nsleep_restart() Al Viro
2017-06-13 22:08 ` [tip:timers/core] posix-timers: Kill ->nsleep_restart() tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 09/16] move adjtimex-related compat syscalls to native counterparts Al Viro
2017-06-13 22:08 ` [tip:timers/core] ntp: Move adjtimex related " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 10/16] take compat timer_settime(2) to native one Al Viro
2017-06-13 22:09 ` [tip:timers/core] posix-timers: Take " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 11/16] take compat timer_gettime(2) " Al Viro
2017-06-13 22:09 ` tip-bot for Al Viro [this message]
2017-06-07 8:42 ` [PATCH 12/16] move compat itimer syscalls to native ones Al Viro
2017-06-13 22:10 ` [tip:timers/core] itimers: Move " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 13/16] clock_gettime/clock_settime/clock_getres: move to native syscalls Al Viro
2017-06-13 22:10 ` [tip:timers/core] posix-timers: Move compat versions of clock_gettime/settime/getres tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 14/16] timer_create(): move compat to native, get rid of set_fs() Al Viro
2017-06-13 22:11 ` [tip:timers/core] posix-timers: Move compat_timer_create() " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 15/16] time()/stime(): move compat to native Al Viro
2017-06-13 22:11 ` [tip:timers/core] time: Move compat_time()/stime() " tip-bot for Al Viro
2017-06-07 8:42 ` [PATCH 16/16] gettimeofday()/settimeofday(): move compat " Al Viro
2017-06-13 22:12 ` [tip:timers/core] time: Move compat_gettimeofday()/settimeofday() " tip-bot for Al Viro
2017-06-12 23:08 ` [PATCH 01/16] move copyout of timespec into do_cpu_nanosleep() Thomas Gleixner
2017-06-13 7:46 ` Thomas Gleixner
2017-06-13 22:04 ` [tip:timers/core] posix-cpu-timers: Move " tip-bot for Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-b0dc12426ec404de99d7e75a12a22d9201d90914@git.kernel.org \
--to=tipbot@zytor.com \
--cc=hpa@zytor.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.