+2010-02-17 Roland McGrath <roland@redhat.com>
+
+ * elf_begin.c (file_read_elf): Leave section rawdata_base and
+ data_base pointers null when [sh_offset,sh_size) points outside
+ the mapped file.
+
2010-02-15 Roland McGrath <roland@redhat.com>
* Makefile.am: Use config/eu.am for common stuff.
elf->state.elf32.scns.data[cnt].elf = elf;
elf->state.elf32.scns.data[cnt].shdr.e32 =
&elf->state.elf32.shdr[cnt];
- elf->state.elf32.scns.data[cnt].rawdata_base =
- elf->state.elf32.scns.data[cnt].data_base =
- ((char *) map_address + offset
- + elf->state.elf32.shdr[cnt].sh_offset);
+ if (likely (elf->state.elf32.shdr[cnt].sh_offset < maxsize)
+ && likely (maxsize - elf->state.elf32.shdr[cnt].sh_offset
+ <= elf->state.elf32.shdr[cnt].sh_size))
+ elf->state.elf32.scns.data[cnt].rawdata_base =
+ elf->state.elf32.scns.data[cnt].data_base =
+ ((char *) map_address + offset
+ + elf->state.elf32.shdr[cnt].sh_offset);
elf->state.elf32.scns.data[cnt].list = &elf->state.elf32.scns;
/* If this is a section with an extended index add a
elf->state.elf64.scns.data[cnt].elf = elf;
elf->state.elf64.scns.data[cnt].shdr.e64 =
&elf->state.elf64.shdr[cnt];
- elf->state.elf64.scns.data[cnt].rawdata_base =
- elf->state.elf64.scns.data[cnt].data_base =
- ((char *) map_address + offset
- + elf->state.elf64.shdr[cnt].sh_offset);
+ if (likely (elf->state.elf64.shdr[cnt].sh_offset < maxsize)
+ && likely (maxsize - elf->state.elf64.shdr[cnt].sh_offset
+ <= elf->state.elf64.shdr[cnt].sh_size))
+ elf->state.elf64.scns.data[cnt].rawdata_base =
+ elf->state.elf64.scns.data[cnt].data_base =
+ ((char *) map_address + offset
+ + elf->state.elf64.shdr[cnt].sh_offset);
elf->state.elf64.scns.data[cnt].list = &elf->state.elf64.scns;
/* If this is a section with an extended index add a