Commit f6eb0fed authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'timers-urgent-2022-08-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer fixes from Ingo Molnar:
 "Misc timer fixes:

   - fix a potential use-after-free bug in posix timers

   - correct a prototype

   - address a build warning"

* tag 'timers-urgent-2022-08-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  posix-cpu-timers: Cleanup CPU timers before freeing them during exec
  time: Correct the prototype of ns_to_kernel_old_timeval and ns_to_timespec64
  posix-timers: Make do_clock_gettime() static
parents c5f1e32e e362359a
...@@ -1304,6 +1304,9 @@ int begin_new_exec(struct linux_binprm * bprm) ...@@ -1304,6 +1304,9 @@ int begin_new_exec(struct linux_binprm * bprm)
bprm->mm = NULL; bprm->mm = NULL;
#ifdef CONFIG_POSIX_TIMERS #ifdef CONFIG_POSIX_TIMERS
spin_lock_irq(&me->sighand->siglock);
posix_cpu_timers_exit(me);
spin_unlock_irq(&me->sighand->siglock);
exit_itimers(me); exit_itimers(me);
flush_itimer_signals(); flush_itimer_signals();
#endif #endif
......
...@@ -145,7 +145,7 @@ static inline s64 timespec64_to_ns(const struct timespec64 *ts) ...@@ -145,7 +145,7 @@ static inline s64 timespec64_to_ns(const struct timespec64 *ts)
* *
* Returns the timespec64 representation of the nsec parameter. * Returns the timespec64 representation of the nsec parameter.
*/ */
extern struct timespec64 ns_to_timespec64(const s64 nsec); extern struct timespec64 ns_to_timespec64(s64 nsec);
/** /**
* timespec64_add_ns - Adds nanoseconds to a timespec64 * timespec64_add_ns - Adds nanoseconds to a timespec64
......
...@@ -70,7 +70,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, ...@@ -70,7 +70,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
return do_sys_settimeofday64(&new_tp, NULL); return do_sys_settimeofday64(&new_tp, NULL);
} }
int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp) static int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp)
{ {
switch (which_clock) { switch (which_clock) {
case CLOCK_REALTIME: case CLOCK_REALTIME:
...@@ -90,6 +90,7 @@ int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp) ...@@ -90,6 +90,7 @@ int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp)
return 0; return 0;
} }
SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock, SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
struct __kernel_timespec __user *, tp) struct __kernel_timespec __user *, tp)
{ {
......
...@@ -449,7 +449,7 @@ time64_t mktime64(const unsigned int year0, const unsigned int mon0, ...@@ -449,7 +449,7 @@ time64_t mktime64(const unsigned int year0, const unsigned int mon0,
} }
EXPORT_SYMBOL(mktime64); EXPORT_SYMBOL(mktime64);
struct __kernel_old_timeval ns_to_kernel_old_timeval(const s64 nsec) struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec)
{ {
struct timespec64 ts = ns_to_timespec64(nsec); struct timespec64 ts = ns_to_timespec64(nsec);
struct __kernel_old_timeval tv; struct __kernel_old_timeval tv;
...@@ -503,7 +503,7 @@ EXPORT_SYMBOL(set_normalized_timespec64); ...@@ -503,7 +503,7 @@ EXPORT_SYMBOL(set_normalized_timespec64);
* *
* Returns the timespec64 representation of the nsec parameter. * Returns the timespec64 representation of the nsec parameter.
*/ */
struct timespec64 ns_to_timespec64(const s64 nsec) struct timespec64 ns_to_timespec64(s64 nsec)
{ {
struct timespec64 ts = { 0, 0 }; struct timespec64 ts = { 0, 0 };
s32 rem; s32 rem;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment