[PATCH 3.18 59/60] alarmtimer: dont rate limit one-shot timers

From: Greg Kroah-Hartman
Date: Tue Jul 25 2017 - 15:18:03 EST


3.18-stable review patch. If anyone has any objections, please let me know.

------------------

From: Greg Hackmann <ghackmann@xxxxxxxxxx>

Commit ff86bf0c65f1 ("alarmtimer: Rate limit periodic intervals") sets a
minimum bound on the alarm timer interval. This minimum bound shouldn't
be applied if the interval is 0. Otherwise, one-shot timers will be
converted into periodic ones.

Fixes: ff86bf0c65f1 ("alarmtimer: Rate limit periodic intervals")
Reported-by: Ben Fennema <fennema@xxxxxxxxxx>
Signed-off-by: Greg Hackmann <ghackmann@xxxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
Cc: John Stultz <john.stultz@xxxxxxxxxx>
Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
kernel/time/alarmtimer.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--- a/kernel/time/alarmtimer.c
+++ b/kernel/time/alarmtimer.c
@@ -619,7 +619,8 @@ static int alarm_timer_set(struct k_itim
* Rate limit to the tick as a hot fix to prevent DOS. Will be
* mopped up later.
*/
- if (ktime_to_ns(timr->it.alarm.interval) < TICK_NSEC)
+ if (timr->it.alarm.interval.tv64 &&
+ ktime_to_ns(timr->it.alarm.interval) < TICK_NSEC)
timr->it.alarm.interval = ktime_set(0, TICK_NSEC);

exp = timespec_to_ktime(new_setting->it_value);