Commit 0f4b0676 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull timer fixes from Thomas Gleixner:
 "As you requested in the rc2 release mail the timer department serves
  you a few real bug fixes:

   - Fix the probe logic of the architected arm/arm64 timer
   - Plug a stack info leak in posix-timers
   - Prevent a shift out of bounds issue in the clockevents core"

* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  ARM/ARM64: arch-timer: fix arch_timer_probed logic
  clockevents: Prevent shift out of bounds
  posix-timers: Fix stack info leak in timer_create()
parents bcdfdaee 59aa896d
...@@ -660,11 +660,11 @@ static bool __init ...@@ -660,11 +660,11 @@ static bool __init
arch_timer_probed(int type, const struct of_device_id *matches) arch_timer_probed(int type, const struct of_device_id *matches)
{ {
struct device_node *dn; struct device_node *dn;
bool probed = false; bool probed = true;
dn = of_find_matching_node(NULL, matches); dn = of_find_matching_node(NULL, matches);
if (dn && of_device_is_available(dn) && (arch_timers_present & type)) if (dn && of_device_is_available(dn) && !(arch_timers_present & type))
probed = true; probed = false;
of_node_put(dn); of_node_put(dn);
return probed; return probed;
......
...@@ -72,7 +72,7 @@ static u64 cev_delta2ns(unsigned long latch, struct clock_event_device *evt, ...@@ -72,7 +72,7 @@ static u64 cev_delta2ns(unsigned long latch, struct clock_event_device *evt,
* Also omit the add if it would overflow the u64 boundary. * Also omit the add if it would overflow the u64 boundary.
*/ */
if ((~0ULL - clc > rnd) && if ((~0ULL - clc > rnd) &&
(!ismax || evt->mult <= (1U << evt->shift))) (!ismax || evt->mult <= (1ULL << evt->shift)))
clc += rnd; clc += rnd;
do_div(clc, evt->mult); do_div(clc, evt->mult);
......
...@@ -636,6 +636,7 @@ SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock, ...@@ -636,6 +636,7 @@ SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
goto out; goto out;
} }
} else { } else {
memset(&event.sigev_value, 0, sizeof(event.sigev_value));
event.sigev_notify = SIGEV_SIGNAL; event.sigev_notify = SIGEV_SIGNAL;
event.sigev_signo = SIGALRM; event.sigev_signo = SIGALRM;
event.sigev_value.sival_int = new_timer->it_id; event.sigev_value.sival_int = new_timer->it_id;
......
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