Re: linux-next: WARNING: at kernel/panic.c:375 __stack_chk_test+0x50/0x54()

From: Kevin Winchester
Date: Thu May 01 2008 - 18:38:08 EST


Arjan van de Ven wrote:
On Wed, 30 Apr 2008 21:24:27 -0300
Kevin Winchester <kjwinchester@xxxxxxxxx> wrote:

Arjan van de Ven wrote:
Kevin Winchester wrote:
Hi Arjan,

There doesn't seem to be an entry in MAINTAINERS for stack
protector, but your signoff was on the last stack protector
related commit I could find, so it's probably a good bet.

I get the following in my dmesg after testing linux-next with the
stack protector turned on. This is an x86-64 UP box if that
helps. It appears to be related to the test for the feature (or
perhaps that is supposed to happen when the feature is tested, I'm
not sure...). Config below.

the important question is: exactly what gcc are you using? (and if
you use a distro gcc, which distro)

second question would be, what does the following command give?

echo "int foo(void) { char X[200]; return 3; }" | $1 -S -xc -c -O0
-mcmodel=kernel -fstack-protector - -o -

(this is the command from scripts/gcc-x86_64-has-stack-protector.sh
that the kernel uses to test at compiletime if you have stack
protector support)
Ubuntu Hardy Heron

kevin@alekhine:~$ gcc --version
gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There
is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.


kevin@alekhine:~$ echo "int foo(void) { char X[200]; return 3; }" |
$1 -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o - bash: -S:
command not found

I assume that $1 was supposed to be gcc, so how about:

eh woops yes

kevin@alekhine:~/linux/linux-2.6/scripts$ sh
gcc-x86_64-has-stack-protector.sh gcc something something

So I would assume that means I pass...


I would rather really like to see the assembly output this thing spits; to see if your compiler behaves sanely.
(Some distros tend to badly patch their gcc unfortunately and this may break the stack protector feature)

Sure, here we go:

kevin@alekhine:~$ echo "int foo(void) { char X[200]; return 3; }" | gcc -S -xc -c -O0 -mcmodel=kernel -fstack-protector - -o -
.file ""
.text
.globl foo
.type foo, @function
foo:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
subq $208, %rsp
.LCFI2:
movq %gs:40, %rax
movq %rax, -8(%rbp)
xorl %eax, %eax
movl $3, %eax
movq -8(%rbp), %rdx
xorq %gs:40, %rdx
je .L3
call __stack_chk_fail
.L3:
leave
ret
.LFE2:
.size foo, .-foo
.section .eh_frame,"a",@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string ""
.uleb128 0x1
.sleb128 -8
.byte 0x10
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.quad .LFB2
.quad .LFE2-.LFB2
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE1:
.ident "GCC: (GNU) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)"
.section .note.GNU-stack,"",@progbits

Does that help?

--
Kevin Winchester
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/