]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
repart: Make sure we clean up temporary files created in context_minimize()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 24 Nov 2022 19:16:01 +0000 (20:16 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 29 Nov 2022 09:08:49 +0000 (10:08 +0100)
src/partition/repart.c

index 7857f7b3d199d5c06aea420680d9b21d1cca57f0..5ac3b26dff7260a6f0e8580322adc563064ce93e 100644 (file)
@@ -211,6 +211,7 @@ struct Partition {
         FreeArea *allocated_to_area;
 
         char *copy_blocks_path;
+        bool copy_blocks_path_is_our_file;
         bool copy_blocks_auto;
         const char *copy_blocks_root;
         int copy_blocks_fd;
@@ -340,7 +341,10 @@ static Partition* partition_free(Partition *p) {
         if (p->new_partition)
                 fdisk_unref_partition(p->new_partition);
 
-        free(p->copy_blocks_path);
+        if (p->copy_blocks_path_is_our_file)
+                unlink_and_free(p->copy_blocks_path);
+        else
+                free(p->copy_blocks_path);
         safe_close(p->copy_blocks_fd);
 
         free(p->format);
@@ -5321,6 +5325,7 @@ static int context_minimize(Context *context) {
                  * loopback file for us. */
                 if (fstype_is_ro(p->format)) {
                         p->copy_blocks_path = TAKE_PTR(temp);
+                        p->copy_blocks_path_is_our_file = true;
                         continue;
                 }
 
@@ -5378,6 +5383,7 @@ static int context_minimize(Context *context) {
                 }
 
                 p->copy_blocks_path = TAKE_PTR(temp);
+                p->copy_blocks_path_is_our_file = true;
         }
 
         return 0;