From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06C1C3A9636; Wed, 23 Sep 2026 14:29:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790173791; cv=none; b=bsfUpZgI1SKZaRDJauspTehiU4VMoKbHj46lXhDxk695gqxWO/75fq3OKLU+WaSGua3qs532uEoKd1R+rWTvuAlFXjntHRoaM7Bdt3Pit3D+Yj4h+/kqdTxsahy+Wd3pOOH0yO0zji+4yn5p4XmLkHGtMzQ6PsOgjZOe7R3QKgQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790173791; c=relaxed/simple; bh=XVYRwazQKVosNHEAtUKdmnu61Mq+p9ZMonx/6vyc2CM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JG+56nRYGfQRKdOQvzn376bgiyNji8IjC3g6BrrPIJbDidX+2p5KtFOTFF9vjYlqy6dghjxG0XkD+YPncdBMSVqkWvbz6Cyilc7WTl4I52eLvpgyjKS7q6bSOJbxuLUSKH+OfDstM+46pFv7IZdnfDdccstrDYipxs1TMc+mX1Q= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=Hc3V6Tnj; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="Hc3V6Tnj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 534991F000FF; Wed, 23 Sep 2026 14:29:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1790173789; bh=gpwU6LmgwwSUKVqS0ByWvDHCf1aCBeA4LZtkGOr9cQU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Hc3V6Tnj3agqobf57sKNV3Lp8Noj4xp7yBG4Dess6JZYcofx14KZhm5CqEYUSzOg+ Z+4nwH7/kn32FqtVfssedxwcWYMWtBcQhF2n1vHP5Y0p2olffkfmLrnVhbHmEbvNOZ L1KdgxG3a72BK+/wC9m9af7kU8TjrTcChSSecn8Y= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ijae Kim , Myeonghun Pak , Ulf Hansson Subject: [PATCH 7.2 345/438] mmc: sdhci-of-aspeed: Remove children before releasing SDC resources Date: Wed, 23 Sep 2026 16:06:06 +0200 Message-ID: <20260923140653.758895390@linuxfoundation.org> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260923140644.756254324@linuxfoundation.org> References: <20260923140644.756254324@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.2-stable review patch. If anyone has any objections, please let me know. ------------------ From: Myeonghun Pak commit 4396d70bb7fec531bcf934fed016b2f3300c670b upstream. Probe failure and removal leave SDHCI child devices registered after the parent clock and managed resources are released. Unregister the OF children in reverse order before disabling the parent clock on both paths. Use of_platform_device_destroy() because manual child creation does not set the flag required by of_platform_depopulate(). This issue was identified during our ongoing static-analysis research while reviewing kernel code. Fixes: bb7b8ec62dfb ("mmc: sdhci-of-aspeed: Add support for the ASPEED SD controller") Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak Assisted-by: OpenAI:GPT-5.6 Cc: stable@vger.kernel.org Signed-off-by: Ulf Hansson Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/sdhci-of-aspeed.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/drivers/mmc/host/sdhci-of-aspeed.c +++ b/drivers/mmc/host/sdhci-of-aspeed.c @@ -560,12 +560,14 @@ static int aspeed_sdc_probe(struct platf cpdev = of_platform_device_create(child, NULL, &pdev->dev); if (!cpdev) { ret = -ENODEV; - goto err_clk; + goto err_children; } } return 0; +err_children: + device_for_each_child_reverse(&pdev->dev, NULL, of_platform_device_destroy); err_clk: clk_disable_unprepare(sdc->clk); return ret; @@ -575,6 +577,7 @@ static void aspeed_sdc_remove(struct pla { struct aspeed_sdc *sdc = dev_get_drvdata(&pdev->dev); + device_for_each_child_reverse(&pdev->dev, NULL, of_platform_device_destroy); clk_disable_unprepare(sdc->clk); }