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.
}
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;
}
}