diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2014-02-27 21:16:04 +0100 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2014-02-27 21:16:04 +0100 |
commit | c91550fc5d8dae5f1140bca649690fa13e5276e9 (patch) | |
tree | 97a26187a90a4c55eb3a0b71683a2e68b31ca1d7 /gdb/solib-svr4.c | |
parent | f17c8bfcc87ba90d55a0fecfb8f7a9933b883457 (diff) | |
download | gdb-c91550fc5d8dae5f1140bca649690fa13e5276e9.zip gdb-c91550fc5d8dae5f1140bca649690fa13e5276e9.tar.gz gdb-c91550fc5d8dae5f1140bca649690fa13e5276e9.tar.bz2 |
Additional PR 8882 fix.
runtest gdb.base/corefile.exp
==23174== ERROR: AddressSanitizer: heap-use-after-free on address 0x604400008c88 at pc 0x68f0be bp 0x7fffae9d7490 sp
0x7fffae9d7480
READ of size 8 at 0x604400008c88 thread T0
#0 0x68f0bd in svr4_read_so_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f0bd)
#1 0x68f64e in svr4_current_sos_direct (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f64e)
#2 0x68f757 in svr4_current_sos (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68f757)
#3 0xcebbff in update_solib_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xcebbff)
0x604400008c88 is located 8 bytes inside of 1104-byte region [0x604400008c80,0x6044000090d0)
freed by thread T0 here:
#0 0x7f52677500f9 (/lib64/libasan.so.0+0x160f9)
#1 0xd2c68a in xfree (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xd2c68a)
#2 0xceb364 in free_so (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xceb364)
#3 0xca59f8 in do_free_so (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xca59f8)
#4 0x93432a in do_my_cleanups (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x93432a)
#5 0x934406 in do_cleanups (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x934406)
#6 0x68efa9 in svr4_read_so_list (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x68efa9)
I did not notice it during my review in:
Re: [PATCH v2] Skip vDSO when reading SO list (PR 8882)
https://sourceware.org/ml/gdb-patches/2013-09/msg00888.html
gdb/
2014-02-27 Jan Kratochvil <jan.kratochvil@redhat.com>
Additional PR 8882 fix.
* solib-svr4.c (svr4_read_so_list): Change first to first_l_name.
Message-ID: <20140226220918.GA10431@host2.jankratochvil.net>
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r-- | gdb/solib-svr4.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index e2e173a..6c4dff7 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -1306,7 +1306,7 @@ static int svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm, struct so_list ***link_ptr_ptr, int ignore_first) { - struct so_list *first = NULL; + CORE_ADDR first_l_name; CORE_ADDR next_lm; for (; lm != 0; prev_lm = lm, lm = next_lm) @@ -1346,7 +1346,7 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm, { struct svr4_info *info = get_svr4_info (); - first = new; + first_l_name = new->lm_info->l_name; info->main_lm_addr = new->lm_info->lm_addr; do_cleanups (old_chain); continue; @@ -1361,8 +1361,7 @@ svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm, inferior executable, then this is not a normal shared object, but (most likely) a vDSO. In this case, silently skip it; otherwise emit a warning. */ - if (first == NULL - || new->lm_info->l_name != first->lm_info->l_name) + if (first_l_name == 0 || new->lm_info->l_name != first_l_name) warning (_("Can't read pathname for load map: %s."), safe_strerror (errcode)); do_cleanups (old_chain); |