diff mbox

[POWEPC] crashdump: do not fail on null pointer dereferencing

Message ID 20100511154108.11546.12066.stgit@muvarov (mailing list archive)
State Accepted, archived
Commit 426b6cb478e60352a463a0d1ec75c1c9fab30b13
Delegated to: Benjamin Herrenschmidt
Headers show

Commit Message

Maxim Uvarov May 11, 2010, 3:41 p.m. UTC
Best regards,
Maxim Uvarov.

From: Maxim Uvarov <muvarov@gmail.com>

Signed-off-by: Maxim Uvarov <muvarov@gmail.com>
---

 arch/powerpc/kernel/crash.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

Comments

Vitaly Wool May 11, 2010, 4:02 p.m. UTC | #1
Hi,

> diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
> index 6f4613d..341d8af 100644
> --- a/arch/powerpc/kernel/crash.c
> +++ b/arch/powerpc/kernel/crash.c
> @@ -375,6 +375,9 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
>        for_each_irq(i) {
>                struct irq_desc *desc = irq_to_desc(i);
>
> +               if (!desc || !desc->chip || !desc->chip->eoi)
> +                       continue;
> +

Kinda unlikely that desc can be NULL here :)

~Vitaly
Michael Ellerman May 13, 2010, 1:25 a.m. UTC | #2
On Tue, 2010-05-11 at 18:02 +0200, Vitaly Wool wrote:
> Hi,
> 
> > diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
> > index 6f4613d..341d8af 100644
> > --- a/arch/powerpc/kernel/crash.c
> > +++ b/arch/powerpc/kernel/crash.c
> > @@ -375,6 +375,9 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
> >        for_each_irq(i) {
> >                struct irq_desc *desc = irq_to_desc(i);
> >
> > +               if (!desc || !desc->chip || !desc->chip->eoi)
> > +                       continue;
> > +

Actually almost certain that desc will be NULL. When CONFIG_SPARSE_IRQ=y
(the default), irq_desc's are allocated lazily.

cheers
diff mbox

Patch

diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c
index 6f4613d..341d8af 100644
--- a/arch/powerpc/kernel/crash.c
+++ b/arch/powerpc/kernel/crash.c
@@ -375,6 +375,9 @@  void default_machine_crash_shutdown(struct pt_regs *regs)
 	for_each_irq(i) {
 		struct irq_desc *desc = irq_to_desc(i);
 
+		if (!desc || !desc->chip || !desc->chip->eoi)
+			continue;
+
 		if (desc->status & IRQ_INPROGRESS)
 			desc->chip->eoi(i);