Martin Schwidefsky <[email protected]> wrote:
>
> From: Heiko Carstens <[email protected]>
>
> [patch 5/13] s390: show_task oops.
>
> The show_task function walks the kernel stack backchain of
> processes assuming that the processes are not running. Since
> this assumption is not correct walking the backchain can lead
> to an addressing exception and therefore to a kernel hang.
> So prevent the kernel hang (you still get incorrect results)
> verity that all read accesses are within the bounds of the
> kernel stack before performing them.
>
This one needs to be thought about and tested versus the just-merged
s390-task_stack_page.patch. I guess it'll still work, but some of the
pretty new accessors could be used in there, at least.
> --- linux-2.6/arch/s390/kernel/process.c 2006-01-12 15:43:19.000000000 +0100
> +++ linux-2.6-patched/arch/s390/kernel/process.c 2006-01-12 15:43:55.000000000 +0100
> @@ -58,10 +58,19 @@ asmlinkage void ret_from_fork(void) __as
> */
> unsigned long thread_saved_pc(struct task_struct *tsk)
> {
> - struct stack_frame *sf;
> + struct stack_frame *sf, *low, *high;
>
> - sf = (struct stack_frame *) tsk->thread.ksp;
> - sf = (struct stack_frame *) sf->back_chain;
> + if (!tsk || !tsk->thread_info)
> + return 0;
> + low = (struct stack_frame *) tsk->thread_info;
> + high = (struct stack_frame *)
> + ((unsigned long) tsk->thread_info + THREAD_SIZE) - 1;
> + sf = (struct stack_frame *) (tsk->thread.ksp & PSW_ADDR_INSN);
> + if (sf <= low || sf > high)
> + return 0;
> + sf = (struct stack_frame *) (sf->back_chain & PSW_ADDR_INSN);
> + if (sf <= low || sf > high)
> + return 0;
> return sf->gprs[8];
> }
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]