From: Mariusz Tkaczyk Date: Tue, 6 Aug 2024 14:11:18 +0000 (+0200) Subject: mdstat: fix list detach issues X-Git-Tag: mdadm-4.4~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b041873ff5556882bc6f17ac3de00c72eebcc4f;p=thirdparty%2Fmdadm.git mdstat: fix list detach issues Move ent = ent->next; to while. It was outside the loop so if there are more than 2 elements and we are looking for 3rd element it causes infinite loop.. Fix el->next zeroing. It causes segfault in mdstat_free(). Theses issues were not visible in my testing because I had only 2 MD devices. Fixes: 4b3644ab4ce6 ("mdstat: Rework mdstat external arrays handling") Signed-off-by: Mariusz Tkaczyk --- diff --git a/mdstat.c b/mdstat.c index a971a957..29e78362 100644 --- a/mdstat.c +++ b/mdstat.c @@ -123,13 +123,15 @@ static void mdstat_ent_list_detach_element(struct mdstat_ent **list_head, struct ent->next = el->next; break; } + + ent = ent->next; } - ent = ent->next; } + /* Guard if not found or list is empty - not allowed */ assert(ent); - ent->next = NULL; + el->next = NULL; } void free_mdstat(struct mdstat_ent *ms)