if (!m)
return NULL;
+ /* First, clear dissected partitions. */
for (PartitionDesignator i = 0; i < _PARTITION_DESIGNATOR_MAX; i++)
dissected_partition_done(m->partitions + i);
+ /* Second, free decrypted images. This must be after dissected_partition_done(), as freeing
+ * DecryptedImage may try to deactivate partitions. */
+ decrypted_image_unref(m->decrypted_image);
+
free(m->image_name);
free(m->hostname);
strv_free(m->machine_info);
return -EINVAL;
if (!m->encrypted && !m->verity_ready) {
- *ret = NULL;
+ if (ret)
+ *ret = NULL;
return 0;
}
}
}
- *ret = TAKE_PTR(d);
+ m->decrypted_image = TAKE_PTR(d);
+ if (ret)
+ *ret = decrypted_image_ref(m->decrypted_image);
return 1;
#else
bool single_file_system:1; /* MBR/GPT or single file system */
DissectedPartition partitions[_PARTITION_DESIGNATOR_MAX];
+ DecryptedImage *decrypted_image;
/* Meta information extracted from /etc/os-release and similar */
char *image_name;