Dixi quod…

>This is fun – I built a sid and a precise chroot today, i386,
>and built mksh against dietlibc-dev_0.33~cvs20110918-4_i386.deb
>from Debian sid (dpkg -i’d on precise). It segfaults only on
>Ubuntu, not on Debian. It is _not_ -fstack-protector-all.
>
>Investigating. May be some gcc default flags difference…
>Matthias, if you have an idea already, shoot.

OK, I got it:

Dump of assembler code for function main:
   0x0804820c <+0>:     push   ebp
   0x0804820d <+1>:     push   edi
   0x0804820e <+2>:     push   esi
   0x0804820f <+3>:     push   ebx
   0x08048210 <+4>:     sub    esp,0x90
   0x08048216 <+10>:    mov    ebp,DWORD PTR [esp+0xa8]
=> 0x0804821d <+17>:    mov    eax,gs:0x14
   0x08048223 <+23>:    mov    DWORD PTR [esp+0x8c],eax
   0x0804822a <+30>:    xor    eax,eax
   0x0804822c <+32>:    call   0x805dfd4 <chvt_reinit>
[…]

The marked line SIGSEGVs.

(gdb) info r
eax            0xf7ffd420       -134228960
ecx            0x3      3
edx            0x0      0
ebx            0x0      0
esp            0xffffd2e0       0xffffd2e0
ebp            0xffffd394       0xffffd394
esi            0xffffd4a8       -11096
edi            0x0      0
eip            0x804821d        0x804821d <main+17>
eflags         0x10282  [ SF IF RF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x0      0

What’s in GS and why does the gcc-generated function prologue
try to access it, anyway? This doesn’t happen on MirBSD… nor,
incidentally, on Debian sid, where main() starts like this:

Dump of assembler code for function main:
=> 0x0804820c <+0>:     push   ebp
   0x0804820d <+1>:     push   edi
   0x0804820e <+2>:     push   esi
   0x0804820f <+3>:     push   ebx
   0x08048210 <+4>:     add    esp,0xffffff80
   0x08048213 <+7>:     mov    edi,DWORD PTR [esp+0x98]
   0x0804821a <+14>:    call   0x805debc <chvt_reinit>

Since this issue arises in gcc-generated code, similar breakage
may occur on other platforms (I can check amd64 but not ARM or,
at the moment, powerpc; I’m just most familiar with i8086/i386,
myself).

bye,
//mirabilos
-- 
In traditional syntax ' is ignored, but in c99 everything between two ' is
handled as character constant.  Therefore you cannot use ' in a preproces-
sing file in c99 mode.  -- Ragge
No faith left in ISO C99, undefined behaviour, etc.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/584980

Title:
  Please merge dietlibc 0.32-5 (universe) from Debian unstable (main)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/dietlibc/+bug/584980/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to