dissect-image: Explicitly remove partitions when done with image
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 18 May 2022 11:35:21 +0000 (13:35 +0200)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 23 May 2022 17:15:16 +0000 (18:15 +0100)
commit75d7e04eb4662a814c26010d447eed8a862f5ec1
tree620412705b319ece346db079f27f56057d4038c2
parentaf7211541272823b1ef4fef8c36d10dc1027733e
dissect-image: Explicitly remove partitions when done with image

When closing a loop device, the kernel will asynchronously remove
the probed partitions. This can lead to race conditions where we
try to reuse a partition device that still needs to be removed by
the kernel. To avoid such issues, let's explicitly try to remove
any partitions using BLKPG_DEL_PARTITION when we're done with an
image.

To make sure we don't try to remove partitions when we want them
to remain (e.g. systemd-dissect --mount), we add
dissected_image_relinquish() in a similar vein to loop_device_relinquish()
and decrypted_image_relinquish().
src/core/namespace.c
src/dissect/dissect.c
src/gpt-auto-generator/gpt-auto-generator.c
src/shared/dissect-image.c
src/shared/dissect-image.h
src/sysext/sysext.c