]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
repart: check if existing partitions can grow
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Sep 2022 12:57:38 +0000 (21:57 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 8 Sep 2022 20:49:00 +0000 (05:49 +0900)
Fixes #24553.

src/partition/repart.c

index 004022f6dabe0c4b99d7af30684428bf8f2814f8..ae3c0bdb26199f51f8d00aee4ec4ae4c68584b1d 100644 (file)
@@ -645,6 +645,12 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_
                         context->n_free_areas == 0 ? 0 :
                         free_area_available_for_new_partitions(context, context->free_areas[context->n_free_areas-1]);
 
+        /* Check that each existing partition can fit its area. */
+        for (size_t i = 0; i < context->n_free_areas; i++)
+                if (free_area_current_end(context, context->free_areas[i]) <
+                    free_area_min_end(context, context->free_areas[i]))
+                        return false;
+
         /* A simple first-fit algorithm. We return true if we can fit the partitions in, otherwise false. */
         LIST_FOREACH(partitions, p, context->partitions) {
                 bool fits = false;