Re: [PATCH 4/7] x86, dumpstack: always call oops_exit from oops_end

Neil Horman
2008-10-22T11:16:59Z

On Wed, Oct 22, 2008 at 12:00:11PM +0200, Alexander van Heukelum wrote:
> Always call oops_exit from oops_end, even if signr==0.
>
> Also, move add_taint(TAINT_DIE) from __die to oops_end
> on x86_64 and interchange two lines to make oops_end
> more similar to the i386-version.
>
> Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>

Acked-by: Neil Horman <nhorman@tuxdriver.com>

> ---
> arch/x86/kernel/dumpstack_32.c | 2 +-
> arch/x86/kernel/dumpstack_64.c | 11 +++++------
> 2 files changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
> index 7c22f99..a29b88f 100644
> --- a/arch/x86/kernel/dumpstack_32.c
> +++ b/arch/x86/kernel/dumpstack_32.c
> @@ -318,6 +318,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
> __raw_spin_unlock(&die_lock);
> raw_local_irq_restore(flags);
>
> + oops_exit();
> if (!signr)
> return;
>
> @@ -325,7 +326,6 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
> panic("Fatal exception in interrupt");
> if (panic_on_oops)
> panic("Fatal exception");
> - oops_exit();
> do_exit(signr);
> }
>
> diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
> index 57ce11b..dc6162b 100644
> --- a/arch/x86/kernel/dumpstack_64.c
> +++ b/arch/x86/kernel/dumpstack_64.c
> @@ -461,22 +461,22 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
> if (regs && kexec_should_crash(current))
> crash_kexec(regs);
>
> - die_owner = -1;
> bust_spinlocks(0);
> + die_owner = -1;
> + add_taint(TAINT_DIE);
> die_nest_count--;
> if (!die_nest_count)
> /* Nest count reaches zero, release the lock. */
> __raw_spin_unlock(&die_lock);
> raw_local_irq_restore(flags);
> - if (!signr) {
> - oops_exit();
> + oops_exit();
> +
> + if (!signr)
> return;
> - }
> if (in_interrupt())
> panic("Fatal exception in interrupt");
> if (panic_on_oops)
> panic("Fatal exception");
> - oops_exit();
> do_exit(signr);
> }
>
> @@ -499,7 +499,6 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
> return 1;
>
> show_registers(regs);
> - add_taint(TAINT_DIE);
> /* Executive summary in case the oops scrolled away */
> printk(KERN_ALERT "RIP ");
> printk_address(regs->ip, 1);
> --
> 1.5.4.3
>
>

--
/****************************************************
* Neil Horman <nhorman@tuxdriver.com>
* Software Engineer, Red Hat
****************************************************/