| From b11ea8fa922db1fea3dd693f560e5d08d5ed7861 Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Fri, 3 May 2013 15:02:50 +0200 |
| Subject: [PATCH] tick: Cleanup NOHZ per cpu data on cpu down |
| |
| commit 4b0c0f294f60abcdd20994a8341a95c8ac5eeb96 upstream. |
| |
| Prarit reported a crash on CPU offline/online. The reason is that on |
| CPU down the NOHZ related per cpu data of the dead cpu is not cleaned |
| up. If at cpu online an interrupt happens before the per cpu tick |
| device is registered the irq_enter() check potentially sees stale data |
| and dereferences a NULL pointer. |
| |
| Cleanup the data after the cpu is dead. |
| |
| Reported-by: Prarit Bhargava <prarit@redhat.com> |
| Cc: Mike Galbraith <bitbucket@online.de> |
| Link: http://lkml.kernel.org/r/alpine.LFD.2.02.1305031451561.2886@ionos |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| kernel/time/tick-sched.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c |
| index f992762d7f51..25d34e1a7911 100644 |
| --- a/kernel/time/tick-sched.c |
| +++ b/kernel/time/tick-sched.c |
| @@ -769,7 +769,7 @@ void tick_cancel_sched_timer(int cpu) |
| hrtimer_cancel(&ts->sched_timer); |
| # endif |
| |
| - ts->nohz_mode = NOHZ_MODE_INACTIVE; |
| + memset(ts, 0, sizeof(*ts)); |
| } |
| #endif |
| |
| -- |
| 1.8.5.2 |
| |