alarmtimer: Rate limit periodic intervals
[GitHub/LineageOS/android_kernel_samsung_universal7580.git] / kernel / time / alarmtimer.c
index 87402d33bbbd262590bddafbc1cd8a4f97744526..d19d10792b864ee03bc1418fe93b7c2bbcb8ff77 100644 (file)
@@ -602,6 +602,14 @@ static int alarm_timer_set(struct k_itimer *timr, int flags,
 
        /* start the timer */
        timr->it.alarm.interval = timespec_to_ktime(new_setting->it_interval);
+
+       /*
+        * 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)
+               timr->it.alarm.interval = ktime_set(0, TICK_NSEC);
+
        exp = timespec_to_ktime(new_setting->it_value);
        /* Convert (if necessary) to absolute time */
        if (flags != TIMER_ABSTIME) {