public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Additional info on modpost segfault
@ 2010-06-04  3:10 alan
  2010-06-04  4:51 ` Américo Wang
  0 siblings, 1 reply; 11+ messages in thread
From: alan @ 2010-06-04  3:10 UTC (permalink / raw)
  To: linux-kernel

Missed adding the actual segfault message:

   LD      drivers/usb/built-in.o
   LD      drivers/built-in.o
   LD      vmlinux.o
   MODPOST vmlinux.o
/bin/sh: line 1: 20665 Segmentation fault      (core dumped) 
scripts/mod/modpost -o 
/home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
make[1]: *** [vmlinux.o] Error 139
make: *** [vmlinux.o] Error 2

I have looked at the gcc 4.4.4 changelog and I can't see anything that 
should cause this.

-- 
Truth is stranger than fiction because fiction has to make sense.

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

* Re: Additional info on modpost segfault
  2010-06-04  3:10 Additional info on modpost segfault alan
@ 2010-06-04  4:51 ` Américo Wang
  2010-06-04  7:22   ` Michal Marek
  0 siblings, 1 reply; 11+ messages in thread
From: Américo Wang @ 2010-06-04  4:51 UTC (permalink / raw)
  To: alan; +Cc: linux-kernel

On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
>Missed adding the actual segfault message:
>
>  LD      drivers/usb/built-in.o
>  LD      drivers/built-in.o
>  LD      vmlinux.o
>  MODPOST vmlinux.o
>/bin/sh: line 1: 20665 Segmentation fault      (core dumped)
>scripts/mod/modpost -o
>/home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
>make[1]: *** [vmlinux.o] Error 139
>make: *** [vmlinux.o] Error 2
>
>I have looked at the gcc 4.4.4 changelog and I can't see anything
>that should cause this.
>

Hmm, you need to find which program segfaults here.

What does 'file the_core_file_your_got' say?

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

* Re: Additional info on modpost segfault
  2010-06-04  4:51 ` Américo Wang
@ 2010-06-04  7:22   ` Michal Marek
  2010-06-07 16:59     ` Alan
  0 siblings, 1 reply; 11+ messages in thread
From: Michal Marek @ 2010-06-04  7:22 UTC (permalink / raw)
  To: Américo Wang; +Cc: alan, linux-kernel

On 4.6.2010 06:51, Américo Wang wrote:
> On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
>> Missed adding the actual segfault message:
>>
>>  LD      drivers/usb/built-in.o
>>  LD      drivers/built-in.o
>>  LD      vmlinux.o
>>  MODPOST vmlinux.o
>> /bin/sh: line 1: 20665 Segmentation fault      (core dumped)
>> scripts/mod/modpost -o
>> /home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
>> make[1]: *** [vmlinux.o] Error 139
>> make: *** [vmlinux.o] Error 2
>>
>> I have looked at the gcc 4.4.4 changelog and I can't see anything
>> that should cause this.
>>
> 
> Hmm, you need to find which program segfaults here.

It's the modpost command run on vmlinux.o. Alan, can you try
$ gdb --args scripts/mod/modpost -o Module.symvers -S vmlinux.o
(gdb) r
(wait for the segfault)
(gdb) bt full

and post the backtrace?

Thanks,
Michal

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

* Re: Additional info on modpost segfault
  2010-06-04  7:22   ` Michal Marek
@ 2010-06-07 16:59     ` Alan
  2010-06-08  5:51       ` Américo Wang
  2010-06-10 23:08       ` Krzysztof Halasa
  0 siblings, 2 replies; 11+ messages in thread
From: Alan @ 2010-06-07 16:59 UTC (permalink / raw)
  To: Michal Marek; +Cc: Américo Wang, linux-kernel

On Fri, 2010-06-04 at 09:22 +0200, Michal Marek wrote: 
> On 4.6.2010 06:51, Américo Wang wrote:
> > On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
> >> Missed adding the actual segfault message:
> >>
> >>  LD      drivers/usb/built-in.o
> >>  LD      drivers/built-in.o
> >>  LD      vmlinux.o
> >>  MODPOST vmlinux.o
> >> /bin/sh: line 1: 20665 Segmentation fault      (core dumped)
> >> scripts/mod/modpost -o
> >> /home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
> >> make[1]: *** [vmlinux.o] Error 139
> >> make: *** [vmlinux.o] Error 2
> >>
> >> I have looked at the gcc 4.4.4 changelog and I can't see anything
> >> that should cause this.
> >>
> > 
> > Hmm, you need to find which program segfaults here.
> 
> It's the modpost command run on vmlinux.o. Alan, can you try
> $ gdb --args scripts/mod/modpost -o Module.symvers -S vmlinux.o
> (gdb) r
> (wait for the segfault)
> (gdb) bt full
> 
> and post the backtrace?

Don't know if this will help much.

This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols
from /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost...(no
debugging symbols found)...done.
(gdb) r
Starting
program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
Module.symvers -S vmlinux.o

Program received signal SIGSEGV, Segmentation fault.
0x0000000000403711 in main ()
(gdb) bt full
#0  0x0000000000403711 in main ()
No symbol table info available.

Trying to get it to compile with debugging info.




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

* Re: Additional info on modpost segfault
  2010-06-07 16:59     ` Alan
@ 2010-06-08  5:51       ` Américo Wang
  2010-06-08 18:24         ` Alan
  2010-06-10 23:08       ` Krzysztof Halasa
  1 sibling, 1 reply; 11+ messages in thread
From: Américo Wang @ 2010-06-08  5:51 UTC (permalink / raw)
  To: Alan; +Cc: Michal Marek, Américo Wang, linux-kernel

On Mon, Jun 07, 2010 at 09:59:39AM -0700, Alan wrote:
>On Fri, 2010-06-04 at 09:22 +0200, Michal Marek wrote: 
>> On 4.6.2010 06:51, Américo Wang wrote:
>> > On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
>> >> Missed adding the actual segfault message:
>> >>
>> >>  LD      drivers/usb/built-in.o
>> >>  LD      drivers/built-in.o
>> >>  LD      vmlinux.o
>> >>  MODPOST vmlinux.o
>> >> /bin/sh: line 1: 20665 Segmentation fault      (core dumped)
>> >> scripts/mod/modpost -o
>> >> /home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
>> >> make[1]: *** [vmlinux.o] Error 139
>> >> make: *** [vmlinux.o] Error 2
>> >>
>> >> I have looked at the gcc 4.4.4 changelog and I can't see anything
>> >> that should cause this.
>> >>
>> > 
>> > Hmm, you need to find which program segfaults here.
>> 
>> It's the modpost command run on vmlinux.o. Alan, can you try
>> $ gdb --args scripts/mod/modpost -o Module.symvers -S vmlinux.o
>> (gdb) r
>> (wait for the segfault)
>> (gdb) bt full
>> 
>> and post the backtrace?
>
>Don't know if this will help much.
>
>This GDB was configured as "x86_64-redhat-linux-gnu".
>For bug reporting instructions, please see:
><http://www.gnu.org/software/gdb/bugs/>...
>Reading symbols
>from /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost...(no
>debugging symbols found)...done.
>(gdb) r
>Starting
>program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
>Module.symvers -S vmlinux.o
>
>Program received signal SIGSEGV, Segmentation fault.
>0x0000000000403711 in main ()
>(gdb) bt full
>#0  0x0000000000403711 in main ()
>No symbol table info available.
>
>Trying to get it to compile with debugging info.
>

Try to append "-g" to HOSTCFLAGS in the top Makefile. ;)


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

* Re: Additional info on modpost segfault
  2010-06-08  5:51       ` Américo Wang
@ 2010-06-08 18:24         ` Alan
  2010-06-09  8:35           ` Américo Wang
  0 siblings, 1 reply; 11+ messages in thread
From: Alan @ 2010-06-08 18:24 UTC (permalink / raw)
  To: Américo Wang; +Cc: Michal Marek, linux-kernel

On Tue, 2010-06-08 at 13:51 +0800, Américo Wang wrote: 
> On Mon, Jun 07, 2010 at 09:59:39AM -0700, Alan wrote:
> >On Fri, 2010-06-04 at 09:22 +0200, Michal Marek wrote: 
> >> On 4.6.2010 06:51, Américo Wang wrote:
> >> > On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
> >> >> Missed adding the actual segfault message:
> >> >>
> >> >>  LD      drivers/usb/built-in.o
> >> >>  LD      drivers/built-in.o
> >> >>  LD      vmlinux.o
> >> >>  MODPOST vmlinux.o
> >> >> /bin/sh: line 1: 20665 Segmentation fault      (core dumped)
> >> >> scripts/mod/modpost -o
> >> >> /home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
> >> >> make[1]: *** [vmlinux.o] Error 139
> >> >> make: *** [vmlinux.o] Error 2
> >> >>
> >> >> I have looked at the gcc 4.4.4 changelog and I can't see anything
> >> >> that should cause this.
> >> >>
> >> > 
> >> > Hmm, you need to find which program segfaults here.
> >> 
> >> It's the modpost command run on vmlinux.o. Alan, can you try
> >> $ gdb --args scripts/mod/modpost -o Module.symvers -S vmlinux.o
> >> (gdb) r
> >> (wait for the segfault)
> >> (gdb) bt full
> >> 
> >> and post the backtrace?
> >
> >Don't know if this will help much.
> >
> >This GDB was configured as "x86_64-redhat-linux-gnu".
> >For bug reporting instructions, please see:
> ><http://www.gnu.org/software/gdb/bugs/>...
> >Reading symbols
> >from /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost...(no
> >debugging symbols found)...done.
> >(gdb) r
> >Starting
> >program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
> >Module.symvers -S vmlinux.o
> >
> >Program received signal SIGSEGV, Segmentation fault.
> >0x0000000000403711 in main ()
> >(gdb) bt full
> >#0  0x0000000000403711 in main ()
> >No symbol table info available.
> >
> >Trying to get it to compile with debugging info.
> >
> 
> Try to append "-g" to HOSTCFLAGS in the top Makefile. ;)

Thanks. Tried CFLAGS and that did not work...

Here is the backtrace:
(gdb) bt full
#0  read_symbols (argc=5, argv=0x7fffffffe198) at
scripts/mod/modpost.c:1564
        license = <value optimized out>
        info = {size = 209695023, hdr = 0x7fffeb263000, 
          sechdrs = 0x7ffff48fcc2c, symtab_start = 0x7ffff7863e2c, 
          symtab_stop = 0x7ffff794341c, export_sec = 37, 
          export_unused_sec = 0, export_gpl_sec = 48, 
          export_unused_gpl_sec = 0, export_gpl_future_sec = 0, 
          strtab = 0x7ffff794341c "", modinfo = 0x0, modinfo_len = 0}
        sym = <value optimized out>
        symname = <value optimized out>
        version = <value optimized out>
        mod = 0x610010
#1  main (argc=5, argv=0x7fffffffe198) at scripts/mod/modpost.c:1999
        mod = <value optimized out>
        buf = {p = 0x0, pos = 0, size = 0}
        kernel_read = <value optimized out>
        module_read = <value optimized out>
        dump_write = 0x7fffffffe4ed "Module.symvers"
        opt = <value optimized out>
        err = <value optimized out>
        extsym_iter = <value optimized out>
        extsym_start = <value optimized out>

The line is does not like is:

  read_symbols(argv[optind++]);

Not certain why...




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

* Re: Additional info on modpost segfault
  2010-06-08 18:24         ` Alan
@ 2010-06-09  8:35           ` Américo Wang
  0 siblings, 0 replies; 11+ messages in thread
From: Américo Wang @ 2010-06-09  8:35 UTC (permalink / raw)
  To: Alan; +Cc: Américo Wang, Michal Marek, linux-kernel

On Tue, Jun 08, 2010 at 11:24:18AM -0700, Alan wrote:
>On Tue, 2010-06-08 at 13:51 +0800, Américo Wang wrote: 
>> On Mon, Jun 07, 2010 at 09:59:39AM -0700, Alan wrote:
>> >On Fri, 2010-06-04 at 09:22 +0200, Michal Marek wrote: 
>> >> On 4.6.2010 06:51, Américo Wang wrote:
>> >> > On Thu, Jun 03, 2010 at 08:10:30PM -0700, alan wrote:
>> >> >> Missed adding the actual segfault message:
>> >> >>
>> >> >>  LD      drivers/usb/built-in.o
>> >> >>  LD      drivers/built-in.o
>> >> >>  LD      vmlinux.o
>> >> >>  MODPOST vmlinux.o
>> >> >> /bin/sh: line 1: 20665 Segmentation fault      (core dumped)
>> >> >> scripts/mod/modpost -o
>> >> >> /home/alan/GitTrees/linux-2.6-mid-ref/Module.symvers -S vmlinux.o
>> >> >> make[1]: *** [vmlinux.o] Error 139
>> >> >> make: *** [vmlinux.o] Error 2
>> >> >>
>> >> >> I have looked at the gcc 4.4.4 changelog and I can't see anything
>> >> >> that should cause this.
>> >> >>
>> >> > 
>> >> > Hmm, you need to find which program segfaults here.
>> >> 
>> >> It's the modpost command run on vmlinux.o. Alan, can you try
>> >> $ gdb --args scripts/mod/modpost -o Module.symvers -S vmlinux.o
>> >> (gdb) r
>> >> (wait for the segfault)
>> >> (gdb) bt full
>> >> 
>> >> and post the backtrace?
>> >
>> >Don't know if this will help much.
>> >
>> >This GDB was configured as "x86_64-redhat-linux-gnu".
>> >For bug reporting instructions, please see:
>> ><http://www.gnu.org/software/gdb/bugs/>...
>> >Reading symbols
>> >from /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost...(no
>> >debugging symbols found)...done.
>> >(gdb) r
>> >Starting
>> >program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
>> >Module.symvers -S vmlinux.o
>> >
>> >Program received signal SIGSEGV, Segmentation fault.
>> >0x0000000000403711 in main ()
>> >(gdb) bt full
>> >#0  0x0000000000403711 in main ()
>> >No symbol table info available.
>> >
>> >Trying to get it to compile with debugging info.
>> >
>> 
>> Try to append "-g" to HOSTCFLAGS in the top Makefile. ;)
>
>Thanks. Tried CFLAGS and that did not work...
>
>Here is the backtrace:
>(gdb) bt full
>#0  read_symbols (argc=5, argv=0x7fffffffe198) at
>scripts/mod/modpost.c:1564
>        license = <value optimized out>
>        info = {size = 209695023, hdr = 0x7fffeb263000, 
>          sechdrs = 0x7ffff48fcc2c, symtab_start = 0x7ffff7863e2c, 
>          symtab_stop = 0x7ffff794341c, export_sec = 37, 
>          export_unused_sec = 0, export_gpl_sec = 48, 
>          export_unused_gpl_sec = 0, export_gpl_future_sec = 0, 
>          strtab = 0x7ffff794341c "", modinfo = 0x0, modinfo_len = 0}
>        sym = <value optimized out>
>        symname = <value optimized out>
>        version = <value optimized out>
>        mod = 0x610010
>#1  main (argc=5, argv=0x7fffffffe198) at scripts/mod/modpost.c:1999
>        mod = <value optimized out>
>        buf = {p = 0x0, pos = 0, size = 0}
>        kernel_read = <value optimized out>
>        module_read = <value optimized out>
>        dump_write = 0x7fffffffe4ed "Module.symvers"
>        opt = <value optimized out>
>        err = <value optimized out>
>        extsym_iter = <value optimized out>
>        extsym_start = <value optimized out>
>
>The line is does not like is:
>
>  read_symbols(argv[optind++]);
>
>Not certain why...

Hmm, it seems the segfault happens at 'license = get_modinfo(...)'?
I can't spot any bug around that.

If I were you, I would do a step by step debug with gdb.

Thanks!

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

* Re: Additional info on modpost segfault
  2010-06-07 16:59     ` Alan
  2010-06-08  5:51       ` Américo Wang
@ 2010-06-10 23:08       ` Krzysztof Halasa
  2010-06-11  0:06         ` alan
  2010-06-11 20:42         ` H. Peter Anvin
  1 sibling, 2 replies; 11+ messages in thread
From: Krzysztof Halasa @ 2010-06-10 23:08 UTC (permalink / raw)
  To: Alan; +Cc: Michal Marek, Américo Wang, linux-kernel

Alan <alan@clueserver.org> writes:

> program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
> Module.symvers -S vmlinux.o
>
> Program received signal SIGSEGV, Segmentation fault.

It just hit me.
It's the offset calculation in reloc_location() which overflows:
        return (void *)elf->hdr + sechdrs[section].sh_offset +
               (r->r_offset - sechdrs[section].sh_addr);

E.g. for the first rodata r entry:
r->r_offset < sechdrs[section].sh_addr
and the expression in the parenthesis produces 0xFFFFFFE0 or something
equally wise.

Does the attached patch fix it?

Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>

--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1317,8 +1317,8 @@ static unsigned int *reloc_location(struct elf_info *elf,
 	Elf_Shdr *sechdrs = elf->sechdrs;
 	int section = sechdr->sh_info;
 
 	return (void *)elf->hdr + sechdrs[section].sh_offset +
-		(r->r_offset - sechdrs[section].sh_addr);
+		r->r_offset - sechdrs[section].sh_addr;
 }
 
 static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)

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

* Re: Additional info on modpost segfault
  2010-06-10 23:08       ` Krzysztof Halasa
@ 2010-06-11  0:06         ` alan
  2010-06-11 20:42         ` H. Peter Anvin
  1 sibling, 0 replies; 11+ messages in thread
From: alan @ 2010-06-11  0:06 UTC (permalink / raw)
  To: Krzysztof Halasa; +Cc: Michal Marek, Américo Wang, linux-kernel

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1631 bytes --]

On Fri, 11 Jun 2010, Krzysztof Halasa wrote:

> Alan <alan@clueserver.org> writes:
>
>> program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
>> Module.symvers -S vmlinux.o
>>
>> Program received signal SIGSEGV, Segmentation fault.
>
> It just hit me.
> It's the offset calculation in reloc_location() which overflows:
>        return (void *)elf->hdr + sechdrs[section].sh_offset +
>               (r->r_offset - sechdrs[section].sh_addr);
>
> E.g. for the first rodata r entry:
> r->r_offset < sechdrs[section].sh_addr
> and the expression in the parenthesis produces 0xFFFFFFE0 or something
> equally wise.
>
> Does the attached patch fix it?

YES!

Thank you!

Now the big question is why does this compile on older versions of gcc?

This needs to get added into 2.6.35-rc2.


>
> Signed-off-by: Krzysztof Haÿÿasa <khc@pm.waw.pl>
>
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -1317,8 +1317,8 @@ static unsigned int *reloc_location(struct elf_info *elf,
> 	Elf_Shdr *sechdrs = elf->sechdrs;
> 	int section = sechdr->sh_info;
>
> 	return (void *)elf->hdr + sechdrs[section].sh_offset +
> -		(r->r_offset - sechdrs[section].sh_addr);
> +		r->r_offset - sechdrs[section].sh_addr;
> }
>
> static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

-- 
Truth is stranger than fiction because fiction has to make sense.

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

* Re: Additional info on modpost segfault
  2010-06-10 23:08       ` Krzysztof Halasa
  2010-06-11  0:06         ` alan
@ 2010-06-11 20:42         ` H. Peter Anvin
  2010-06-11 22:49           ` Michal Marek
  1 sibling, 1 reply; 11+ messages in thread
From: H. Peter Anvin @ 2010-06-11 20:42 UTC (permalink / raw)
  To: Krzysztof Halasa; +Cc: Alan, Michal Marek, Américo Wang, linux-kernel

Michal, are you sending this to Linus?

	-hpa


On 06/10/2010 04:08 PM, Krzysztof Halasa wrote:
> Alan <alan@clueserver.org> writes:
> 
>> program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
>> Module.symvers -S vmlinux.o
>>
>> Program received signal SIGSEGV, Segmentation fault.
> 
> It just hit me.
> It's the offset calculation in reloc_location() which overflows:
>         return (void *)elf->hdr + sechdrs[section].sh_offset +
>                (r->r_offset - sechdrs[section].sh_addr);
> 
> E.g. for the first rodata r entry:
> r->r_offset < sechdrs[section].sh_addr
> and the expression in the parenthesis produces 0xFFFFFFE0 or something
> equally wise.
> 
> Does the attached patch fix it?
> 
> Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
> 
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -1317,8 +1317,8 @@ static unsigned int *reloc_location(struct elf_info *elf,
>  	Elf_Shdr *sechdrs = elf->sechdrs;
>  	int section = sechdr->sh_info;
>  
>  	return (void *)elf->hdr + sechdrs[section].sh_offset +
> -		(r->r_offset - sechdrs[section].sh_addr);
> +		r->r_offset - sechdrs[section].sh_addr;
>  }
>  
>  static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


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

* Re: Additional info on modpost segfault
  2010-06-11 20:42         ` H. Peter Anvin
@ 2010-06-11 22:49           ` Michal Marek
  0 siblings, 0 replies; 11+ messages in thread
From: Michal Marek @ 2010-06-11 22:49 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Krzysztof Halasa, Alan, Américo Wang, linux-kernel

On Fri, Jun 11, 2010 at 01:42:47PM -0700, H. Peter Anvin wrote:
> Michal, are you sending this to Linus?

I'll, once Linus takes another pull request I sent a couple of hours
ago. Thanks for the patch Krzysztof!

Michal

> 
> 	-hpa
> 
> 
> On 06/10/2010 04:08 PM, Krzysztof Halasa wrote:
> > Alan <alan@clueserver.org> writes:
> > 
> >> program: /home/alan/GitTrees/linux-2.6-mid-ref/scripts/mod/modpost -o
> >> Module.symvers -S vmlinux.o
> >>
> >> Program received signal SIGSEGV, Segmentation fault.
> > 
> > It just hit me.
> > It's the offset calculation in reloc_location() which overflows:
> >         return (void *)elf->hdr + sechdrs[section].sh_offset +
> >                (r->r_offset - sechdrs[section].sh_addr);
> > 
> > E.g. for the first rodata r entry:
> > r->r_offset < sechdrs[section].sh_addr
> > and the expression in the parenthesis produces 0xFFFFFFE0 or something
> > equally wise.
> > 
> > Does the attached patch fix it?
> > 
> > Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
> > 
> > --- a/scripts/mod/modpost.c
> > +++ b/scripts/mod/modpost.c
> > @@ -1317,8 +1317,8 @@ static unsigned int *reloc_location(struct elf_info *elf,
> >  	Elf_Shdr *sechdrs = elf->sechdrs;
> >  	int section = sechdr->sh_info;
> >  
> >  	return (void *)elf->hdr + sechdrs[section].sh_offset +
> > -		(r->r_offset - sechdrs[section].sh_addr);
> > +		r->r_offset - sechdrs[section].sh_addr;
> >  }
> >  
> >  static int addend_386_rel(struct elf_info *elf, Elf_Shdr *sechdr, Elf_Rela *r)
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at  http://www.tux.org/lkml/
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

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

end of thread, other threads:[~2010-06-11 22:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-04  3:10 Additional info on modpost segfault alan
2010-06-04  4:51 ` Américo Wang
2010-06-04  7:22   ` Michal Marek
2010-06-07 16:59     ` Alan
2010-06-08  5:51       ` Américo Wang
2010-06-08 18:24         ` Alan
2010-06-09  8:35           ` Américo Wang
2010-06-10 23:08       ` Krzysztof Halasa
2010-06-11  0:06         ` alan
2010-06-11 20:42         ` H. Peter Anvin
2010-06-11 22:49           ` Michal Marek

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