]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - kernel/itimer.c
[PATCH] hrtimers: prevent possible itimer DoS
[mirror_ubuntu-bionic-kernel.git] / kernel / itimer.c
index 4fc6c0caf5d434b1a2457ba293d020da8a494c83..307c6a632ef6baa7ff0cec46273293d4cc84afc6 100644 (file)
@@ -135,11 +135,6 @@ enum hrtimer_restart it_real_fn(struct hrtimer *timer)
 
        send_group_sig_info(SIGALRM, SEND_SIG_PRIV, sig->tsk);
 
-       if (sig->it_real_incr.tv64 != 0) {
-               hrtimer_forward(timer, hrtimer_cb_get_time(timer),
-                               sig->it_real_incr);
-               return HRTIMER_RESTART;
-       }
        return HRTIMER_NORESTART;
 }
 
@@ -231,11 +226,14 @@ again:
                        spin_unlock_irq(&tsk->sighand->siglock);
                        goto again;
                }
-               tsk->signal->it_real_incr =
-                       timeval_to_ktime(value->it_interval);
                expires = timeval_to_ktime(value->it_value);
-               if (expires.tv64 != 0)
+               if (expires.tv64 != 0) {
+                       tsk->signal->it_real_incr =
+                               timeval_to_ktime(value->it_interval);
                        hrtimer_start(timer, expires, HRTIMER_MODE_REL);
+               } else
+                       tsk->signal->it_real_incr.tv64 = 0;
+
                spin_unlock_irq(&tsk->sighand->siglock);
                break;
        case ITIMER_VIRTUAL: