]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dissect-image: take reference of DecryptedImage into DissectedImage
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 11 Sep 2022 14:08:25 +0000 (23:08 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 17 Sep 2022 22:56:32 +0000 (07:56 +0900)
No functional changes. Preparation for later commits.

src/shared/dissect-image.c
src/shared/dissect-image.h

index 5e1af809975d257e5b7ad0773f0e45dba7986c10..e97c22d79644b68489e60f4b3037b837597aa8b5 100644 (file)
@@ -1112,9 +1112,14 @@ DissectedImage* dissected_image_unref(DissectedImage *m) {
         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);
@@ -2096,7 +2101,8 @@ int dissected_image_decrypt(
                 return -EINVAL;
 
         if (!m->encrypted && !m->verity_ready) {
-                *ret = NULL;
+                if (ret)
+                        *ret = NULL;
                 return 0;
         }
 
@@ -2130,7 +2136,9 @@ int dissected_image_decrypt(
                 }
         }
 
-        *ret = TAKE_PTR(d);
+        m->decrypted_image = TAKE_PTR(d);
+        if (ret)
+                *ret = decrypted_image_ref(m->decrypted_image);
 
         return 1;
 #else
index 6dd52460426a6391f7169b5225073f22964861ce..7308798493b9a408add44cb616aab4c23fa9eaf1 100644 (file)
@@ -211,6 +211,7 @@ struct DissectedImage {
         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;