From e4c78b3b86fd2148c37d1870cf8bd663f49d4fe0 Mon Sep 17 00:00:00 2001 From: Luis Machado Date: Fri, 11 Aug 2023 07:54:25 +0100 Subject: [PATCH] [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. --- gdbserver/linux-low.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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; } } -- 2.47.2