mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
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>
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
2014-02-27 Pedro Alves <palves@redhat.com>
|
2014-02-27 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* nat/linux-waitpid.c (my_waitpid): Only block signals if WNOHANG
|
* nat/linux-waitpid.c (my_waitpid): Only block signals if WNOHANG
|
||||||
|
@ -1306,7 +1306,7 @@ static int
|
|||||||
svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
svr4_read_so_list (CORE_ADDR lm, CORE_ADDR prev_lm,
|
||||||
struct so_list ***link_ptr_ptr, int ignore_first)
|
struct so_list ***link_ptr_ptr, int ignore_first)
|
||||||
{
|
{
|
||||||
struct so_list *first = NULL;
|
CORE_ADDR first_l_name;
|
||||||
CORE_ADDR next_lm;
|
CORE_ADDR next_lm;
|
||||||
|
|
||||||
for (; lm != 0; prev_lm = lm, lm = 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 ();
|
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;
|
info->main_lm_addr = new->lm_info->lm_addr;
|
||||||
do_cleanups (old_chain);
|
do_cleanups (old_chain);
|
||||||
continue;
|
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
|
inferior executable, then this is not a normal shared
|
||||||
object, but (most likely) a vDSO. In this case, silently
|
object, but (most likely) a vDSO. In this case, silently
|
||||||
skip it; otherwise emit a warning. */
|
skip it; otherwise emit a warning. */
|
||||||
if (first == NULL
|
if (first_l_name == 0 || new->lm_info->l_name != first_l_name)
|
||||||
|| new->lm_info->l_name != first->lm_info->l_name)
|
|
||||||
warning (_("Can't read pathname for load map: %s."),
|
warning (_("Can't read pathname for load map: %s."),
|
||||||
safe_strerror (errcode));
|
safe_strerror (errcode));
|
||||||
do_cleanups (old_chain);
|
do_cleanups (old_chain);
|
||||||
|
Reference in New Issue
Block a user