diff options
author | Michael Marineau <marineam@gentoo.org> | 2008-06-10 21:09:01 +0000 |
---|---|---|
committer | Michael Marineau <marineam@gentoo.org> | 2008-06-10 21:09:01 +0000 |
commit | adb557c4998d93912651b78ce24b7924a69f704e (patch) | |
tree | 9e95e5dbb8d16f5994a16e183d0cad8af8e73b41 /tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch | |
parent | Add backported e1000 driver from kernel-xen-2.6-2.6.21.7-3.fc8 (diff) | |
download | xen-adb557c4998d93912651b78ce24b7924a69f704e.tar.gz xen-adb557c4998d93912651b78ce24b7924a69f704e.tar.bz2 xen-adb557c4998d93912651b78ce24b7924a69f704e.zip |
Releasing 2.6.18-11
svn path=/patches/; revision=80
Diffstat (limited to 'tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch')
-rw-r--r-- | tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch b/tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch new file mode 100644 index 0000000..d8c622e --- /dev/null +++ b/tags/2.6.18-11/30068_hrtimer-prevent-overrun.patch @@ -0,0 +1,38 @@ +commit 13788ccc41ceea5893f9c747c59bc0b28f2416c2 +Author: Thomas Gleixner <tglx@linutronix.de> +Date: Fri Mar 16 13:38:20 2007 -0800 + + [PATCH] hrtimer: prevent overrun DoS in hrtimer_forward() + + hrtimer_forward() does not check for the possible overflow of + timer->expires. This can happen on 64 bit machines with large interval + values and results currently in an endless loop in the softirq because the + expiry value becomes negative and therefor the timer is expired all the + time. + + Check for this condition and set the expiry value to the max. expiry time + in the future. The fix should be applied to stable kernel series as well. + + Signed-off-by: Thomas Gleixner <tglx@linutronix.de> + Acked-by: Ingo Molnar <mingo@elte.hu> + Cc: <stable@kernel.org> + Signed-off-by: Andrew Morton <akpm@linux-foundation.org> + Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> + +diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c +index ec4cb9f..5e7122d 100644 +--- a/kernel/hrtimer.c ++++ b/kernel/hrtimer.c +@@ -644,6 +644,12 @@ hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval) + orun++; + } + timer->expires = ktime_add(timer->expires, interval); ++ /* ++ * Make sure, that the result did not wrap with a very large ++ * interval. ++ */ ++ if (timer->expires.tv64 < 0) ++ timer->expires = ktime_set(KTIME_SEC_MAX, 0); + + return orun; + } |