If fill_mmap() was run for a section that's past the shdr_end, but does
not immediately follow the section headers the fill start would be
determined incorrectly as shdr_end, which would wipe off contents of
sections between shdr_end and current one.
Issue was reported and triaged by Hugo Mildenberger, Graham Murray
and Peter Alfredsen. (http://bugs.gentoo.org/show_bug.cgi?id=288977)
+2009-10-23 Lubomir Rintel <lkundrak@v3.sk>
+
+ * elf32_updatefile.c (fill_mmap): When starting past shdr_end, start
+ filling from section start, not shdr_end.
+
2009-11-10 Roland McGrath <roland@redhat.com>
* elf_readall.c (__libelf_readall): Fetch file size if not yet known.
if (last_position + written != scn_start + offset
&& shdr_end < scn_start + offset)
- memset (shdr_end, __libelf_fill_byte,
- scn_start + offset - shdr_end);
+ {
+ char *fill_start = MAX (shdr_end, scn_start);
+ memset (fill_start, __libelf_fill_byte,
+ scn_start + offset - fill_start);
+ }
}
if (scn->data_list_rear != NULL)