+2010-04-14 Roland McGrath <roland@redhat.com>
+
+ * link_map.c (report_r_debug): Limit iterations on the l_next chain to
+ an upper bound on sane possible number of elements.
+
2010-03-11 Roland McGrath <roland@redhat.com>
* link_map.c (auxv_format_probe): Fix scanning loop, so we really scan
Dwfl_Module **lastmodp = &dwfl->modulelist;
int result = 0;
- while (next != 0)
+
+ /* There can't be more elements in the link_map list than there are
+ segments. DWFL->lookup_elts is probably twice that number, so it
+ is certainly above the upper bound. If we iterate too many times,
+ there must be a loop in the pointers due to link_map clobberation. */
+ size_t iterations = 0;
+ while (next != 0 && ++iterations < dwfl->lookup_elts)
{
if (read_addrs (next, 4))
return release_buffer (-1);
? elf32_xlatetom : elf64_xlatetom)
(&out, &in, elfdata) != NULL))
{
- /* We are looking for PT_DYNAMIC. */
+ /* We are looking for DT_DEBUG. */
const union
{
Elf32_Dyn d32[dyn_filesz / sizeof (Elf32_Dyn)];