From 7d3879e8580ae578afa64061026226e98f6f53be Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 2 Apr 2015 13:39:03 +0200 Subject: [PATCH] libdwfl: Correct off-by-one check in segment.c insert. Caught by running run-backtrace-core-x32.sh under valgrind. Signed-off-by: Mark Wielaard --- libdwfl/ChangeLog | 6 +++++- libdwfl/segment.c | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 143d38146..d4cd3f5a9 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,6 +1,10 @@ +2015-04-02 Mark Wielaard + + * segment.c (insert): Check correct number of lookup_elts. + 2015-03-31 Mark Wielaard - * core-file.c (core_file_read_eagerly): Special case small images. + * core-file.c (core_file_read_eagerly): Special case small images. 2015-01-26 Mark Wielaard diff --git a/libdwfl/segment.c b/libdwfl/segment.c index 927691745..2983cf232 100644 --- a/libdwfl/segment.c +++ b/libdwfl/segment.c @@ -1,5 +1,5 @@ /* Manage address space lookup table for libdwfl. - Copyright (C) 2008, 2009, 2010, 2013 Red Hat, Inc. + Copyright (C) 2008, 2009, 2010, 2013, 2015 Red Hat, Inc. This file is part of elfutils. This file is free software; you can redistribute it and/or modify @@ -50,7 +50,8 @@ static bool insert (Dwfl *dwfl, size_t i, GElf_Addr start, GElf_Addr end, int segndx) { bool need_start = (i == 0 || dwfl->lookup_addr[i - 1] != start); - bool need_end = (i >= dwfl->lookup_elts || dwfl->lookup_addr[i + 1] != end); + bool need_end = (i + 1 >= dwfl->lookup_elts + || dwfl->lookup_addr[i + 1] != end); size_t need = need_start + need_end; if (need == 0) return false; -- 2.47.2