From: Luis Machado Date: Fri, 11 Aug 2023 06:54:25 +0000 (+0100) Subject: [Morello/gdbserver] Fix incorrect vector resize operation X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e4c78b3b86fd2148c37d1870cf8bd663f49d4fe0;p=thirdparty%2Fbinutils-gdb.git [Morello/gdbserver] Fix incorrect vector resize operation This patch fixes an incorrect vector resize operation when reading the auxv. A mistake makes the current code copy data over the end of the vector buffer, leading to memory corruption. Fix this by having a pointer to the end of the vector buffer before resizing the took place. --- diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc index 110be634f31..34bba30a8b8 100644 --- a/gdbserver/linux-low.cc +++ b/gdbserver/linux-low.cc @@ -5788,14 +5788,17 @@ linux_process_target::get_auxv () } else if (n < block_size) { - /* We're done reading data. */ + /* We're done reading data. Shrink the vector to fit the right size + of the auxv data. */ auxv.resize (auxv.size () - (block_size - n)); done = true; } else { + /* Enlarge the vector so we can fit another chunk of auxv data. */ + size_t old_size = auxv.size (); auxv.resize (auxv.size () + block_size); - ptr = auxv.data () + auxv.size (); + ptr = auxv.data () + old_size; } }