]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdadm: fix grow segfault for IMSM
authorMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Mon, 18 Mar 2024 16:28:42 +0000 (17:28 +0100)
committerMariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Fri, 22 Mar 2024 11:16:41 +0000 (12:16 +0100)
If sc is not initialized, there is possibility that sc.pols is not zeroed
and it causes segfault.

Add missing initialization.
Add missing dev_policy_free() in two places.

Fixes: f656201188d7 ("mdadm: drop get_required_spare_criteria()")
Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
Incremental.c
super-intel.c

index 958ba9ba7851e466518b7452e9a4c62a55b6cd83..83db071214ee57ba507e5cfed73f85494cb9950e 100644 (file)
@@ -874,6 +874,7 @@ mdadm_status_t incremental_external_test_spare_criteria(struct supertype *st, ch
        rv = MDADM_STATUS_SUCCESS;
 
 out:
+       dev_policy_free(sc.pols);
        dup->ss->free_super(dup);
        free(dup);
 
index ff2590fef63fa8f2f3754cacb3186f5eb739f41c..70f3c4efcde7d2c4353a4ca1cdae2b82fa4b676c 100644 (file)
@@ -11518,10 +11518,15 @@ static int imsm_reshape_is_allowed_on_container(struct supertype *st,
  */
 static struct mdinfo *get_spares_for_grow(struct supertype *st)
 {
-       struct spare_criteria sc;
+       struct spare_criteria sc = {0};
+       struct mdinfo *spares;
 
        get_spare_criteria_imsm(st, NULL, &sc);
-       return container_choose_spares(st, &sc, NULL, NULL, NULL, 0);
+       spares = container_choose_spares(st, &sc, NULL, NULL, NULL, 0);
+
+       dev_policy_free(sc.pols);
+
+       return spares;
 }
 
 /******************************************************************************