public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [2.6] binfmt_elf bug (exposed by klibc).
@ 2005-10-07 10:09 Paweł Sikora
  2005-10-07 13:46 ` Horst von Brand
  0 siblings, 1 reply; 10+ messages in thread
From: Paweł Sikora @ 2005-10-07 10:09 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 3253 bytes --]

Hi All,

I've a simple program called empty.c.

$ cat empty.c

int main(int argc, char* argv[])
{
    return 0;
}

$ cat empty410.s

        .file   "empty.c"
        .text
        .p2align 4,,15
.globl main
        .type   main, @function
main:
        xorl    %eax, %eax
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.1.0 20050922 (experimental)"
        .section        .note.GNU-stack,"", at progbits

binutils-2.15.94.0.2.2 produces for this code empty .data and .bss sections:

Program Header:
    PHDR off    0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
         filesz 0x000000c0 memsz 0x000000c0 flags r-x
  INTERP off    0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0
         filesz 0x0000002a memsz 0x0000002a flags r--
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x00000123 memsz 0x00000123 flags r-x
    LOAD off    0x00000124 vaddr 0x08049124 paddr 0x08049124 align 2**12
         filesz 0x00000000 memsz 0x00000000 flags rw-
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rwx
PAX_FLAGS off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags --- 2800

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .interp       0000002a  080480f4  080480f4  000000f4  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         00000003  08048120  08048120  00000120  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .data         00000000  08049124  08049124  00000124  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .bss          00000000  08049124  08049124  00000124  2**2
                  ALLOC

and /lib/klibc-*.so interpeter works fine.

binutils-2.16.91.0.3 doesn't produce useless empty sections:

Program Header:
    PHDR off    0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
         filesz 0x000000a0 memsz 0x000000a0 flags r-x
  INTERP off    0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0
         filesz 0x0000002a memsz 0x0000002a flags r--
    LOAD off    0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
         filesz 0x00000123 memsz 0x00000123 flags r-x
   STACK off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags rwx
PAX_FLAGS off    0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000000 memsz 0x00000000 flags --- 2800

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .interp       0000002a  080480f4  080480f4  000000f4  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         00000003  08048120  08048120  00000120  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE

...and klibc's loader doesn't reach crt0.o:_start().

It receives sigsegv from kernel. The load_elf_binary() calls
padzero() for nonexistent .bss mapping.

Attached workaround fixes problem. Could anybody look into this?

Regards,
Paweł.

-- 
The only thing necessary for the triumph of evil
  is for good men to do nothing.
                                           - Edmund Burke

[-- Attachment #2: linux-2.6-binfmt-empty-bss.patch --]
[-- Type: text/x-diff, Size: 433 bytes --]

--- a/fs/binfmt_elf.c	2005-09-30 23:17:35.000000000 +0200
+++ b/fs/binfmt_elf.c	2005-10-07 11:46:27.159874250 +0200
@@ -905,7 +905,7 @@ static int load_elf_binary(struct linux_
 		send_sig(SIGKILL, current, 0);
 		goto out_free_dentry;
 	}
-	if (padzero(elf_bss)) {
+	if ((elf_bss != elf_brk) && padzero(elf_bss)) {
 		send_sig(SIGSEGV, current, 0);
 		retval = -EFAULT; /* Nobody gets to see this, but.. */
 		goto out_free_dentry;

[-- Attachment #3: testcase.tar.bz2 --]
[-- Type: application/x-tbz, Size: 12515 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2005-10-08 19:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-07 10:09 [2.6] binfmt_elf bug (exposed by klibc) Paweł Sikora
2005-10-07 13:46 ` Horst von Brand
2005-10-07 14:11   ` linux-os (Dick Johnson)
2005-10-07 14:21   ` Paweł Sikora
2005-10-07 15:33     ` Horst von Brand
2005-10-07 15:41       ` Paweł Sikora
     [not found]         ` <Pine.LNX.4.61.0510071200340.11579@chaos.analogic.com>
2005-10-07 21:20           ` Paweł Sikora
     [not found]             ` <Pine.LNX.4.61.0510071740040.13291@chaos.analogic.com>
2005-10-07 22:42               ` Paweł Sikora
2005-10-08 14:30                 ` Jan-Benedict Glaw
2005-10-08 19:29                   ` Paweł Sikora

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox