summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuoqing Jiang <gqjiang@suse.com>2018-08-27 11:10:52 +0800
committerJes Sorensen <jsorensen@fb.com>2018-09-27 10:30:19 -0400
commit783a4a93b9f01d1e9de98ea7d318a7885382cefa (patch)
tree1e58e21c85caa98555b897110319dd4f690bc3be
parentd8b0173894fb4810d861ce390e241216bdfaf325 (diff)
downloadmdadm-783a4a93b9f01d1e9de98ea7d318a7885382cefa.tar.gz
Assemble: set devices to NULL when load_devices can't load device
Since load_devices frees "devices" when it can't find any device, we should set it to NULL to avoid double free issue which can be reproduced by below steps: mdadm -CR /dev/md/vol -l0 -e 1.2 -n2 /dev/sd[b-c] --assume-clean mdadm -Ss mdadm -A /dev/md127 /dev/sd[b-c] --update metadata Reported-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Tested-by: Tkaczyk Mariusz <mariusz.tkaczyk@intel.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
-rw-r--r--Assemble.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/Assemble.c b/Assemble.c
index 0264190..a79466c 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -1539,6 +1539,11 @@ try_again:
&most_recent, &bestcnt, &best, inargv);
if (devcnt < 0) {
mdfd = -3;
+ /*
+ * devices is already freed in load_devices, so set devices
+ * to NULL to avoid double free devices.
+ */
+ devices = NULL;
goto out;
}