libopkg: fix double-free crash on recursive package removal
authorJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:04:57 +0000 (10:04 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:04:57 +0000 (10:04 +0100)
commit386dbd35e6f5d9c272c68faa0247ffce6cc85b4c
tree0489df63deb8a61a09124bf8fd242d3e35554cac
parent4a97d5bab9f2369e8af32617da3c780b59a817f2
libopkg: fix double-free crash on recursive package removal

The opkg_remove_dependent_pkgs() function will trigger a pkg_vec_free() and
break the loop when an error is returned by opkg_remove_pkg().

Since the vector is freed anyway after the loop, a double free occurs,
leading to a segmentation fault.

This situation commonly happens when recursively deleting packages in
conjunction with --autoremove where dependent packages might already have
been removed by previous iterations.

Simply break the loop without prematurely freeing the vector to fix this.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
libopkg/opkg_remove.c