2006-08-25 07:00:18

by Keith Owens

[permalink] [raw]
Subject: Incorrect alignment assumptions in x86_64 stacktrace

2.6.18-rc4 arch/x86_64/kernel/stacktrace.c::get_stack_end() incorrectly
assumes that the irqstackptr is IRQSTACKSIZE aligned.

stack_end = (unsigned long)cpu_pda(cpu)->irqstackptr;
if (stack_end) {
stack_start = stack_end & ~(IRQSTACKSIZE-1);

irqstackptr is only guaranteed to be page aligned, not IRQSTACKSIZE
(4*PAGE_SIZE) aligned.


2006-08-25 07:34:33

by Andi Kleen

[permalink] [raw]
Subject: Re: Incorrect alignment assumptions in x86_64 stacktrace

On Friday 25 August 2006 08:59, Keith Owens wrote:
> 2.6.18-rc4 arch/x86_64/kernel/stacktrace.c::get_stack_end() incorrectly
> assumes that the irqstackptr is IRQSTACKSIZE aligned.
>
> stack_end = (unsigned long)cpu_pda(cpu)->irqstackptr;
> if (stack_end) {
> stack_start = stack_end & ~(IRQSTACKSIZE-1);
>
> irqstackptr is only guaranteed to be page aligned, not IRQSTACKSIZE
> (4*PAGE_SIZE) aligned.

Thanks. I have already removed that code post 2.6.18 (the standard backtracer
now does both stacktrace and show_trace)

You think it is important enough for 2.6.18?

-Andi

2006-08-25 07:43:22

by Keith Owens

[permalink] [raw]
Subject: Re: Incorrect alignment assumptions in x86_64 stacktrace

Andi Kleen (on Fri, 25 Aug 2006 09:33:53 +0200) wrote:
>On Friday 25 August 2006 08:59, Keith Owens wrote:
>> 2.6.18-rc4 arch/x86_64/kernel/stacktrace.c::get_stack_end() incorrectly
>> assumes that the irqstackptr is IRQSTACKSIZE aligned.
>>
>> stack_end = (unsigned long)cpu_pda(cpu)->irqstackptr;
>> if (stack_end) {
>> stack_start = stack_end & ~(IRQSTACKSIZE-1);
>>
>> irqstackptr is only guaranteed to be page aligned, not IRQSTACKSIZE
>> (4*PAGE_SIZE) aligned.
>
>Thanks. I have already removed that code post 2.6.18 (the standard backtracer
>now does both stacktrace and show_trace)
>
>You think it is important enough for 2.6.18?

Depends if any x86_64 distributions are going to be based on 2.6.18. I
hear rumours, but no facts.