From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794590146; b=UhqShLTH6+O2n8nVfij0LUtb+3kjOuu7odguDQm3+3W69jwTA09A7xZbmF8Hrgt4wZuV J0AVJLKEoVVJQm0Eq1OVUMZfylHMX3o1AZAAHZbLR+uoaLehp3Hf2yXyDsfNmhilDcH37 2Fn9AEN7MM81ltIuUjTHmFQeskdlpxXuHf7+2LiGLSI+X35sjB9h+Wpv7j+CQYcS7B2q+ zXn5nacaY5qPnPGNY4tYVJLxXWtmIqO7mnOVBsYyNHSLAo3NdePjK6y5sVviZPz0nVQEo 5VQ9onCPDCeLwRVPs2YXMw1WiYwpSOE5sYXOpaCseo2OihFhitjCcpDsMndq/KlumUw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794590146; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=5DpXlozvJLLu0Y2/QeaFU7f/wUvohB6t0+aTS/SHZQY=; b=UCwsngJWoYAt3oVT9fa69TOQRBQOH6HS4MDBHE4G6XeSmnux/10oQrn15/CFUVfLVAM0 mnaDQWA2suxXNirdBTW8H1KcXLXntpygGEix5DfvV5Qdjf+3J9E+3Vlk9PhGk0I2VrzLV v34TnwZStnrt5j8lHjbLEVTqULY+GtiMciqyEKAi2Q4mOMGf7+TZCo4S1wHn25PIWY9Sx r1fVH2N3gx6oj2+3Mj9fQWKqkX5pTy7Dv2HzpeJRZ8ZzuzlsjLIvJC3DDf0I9UR5tqiJX Ae9qOJ+mwgNTRqIFW2LQVLDRD0o+K7IGklPoZKOkqzbDWIqXS+zrEPUZHJDKAh4AUnQ== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b="domACO/b"; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB28D606D498; Fri, 13 Nov 2026 17:15:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=domACO/b Received: by smtp.kernel.org (Postfix) with ESMTPSA id 678C01F000C4; Fri, 13 Nov 2026 17:15:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794590146; bh=5DpXlozvJLLu0Y2/QeaFU7f/wUvohB6t0+aTS/SHZQY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=domACO/bJkEF6PAbQZd+mho7phoX4YgnYxgMvKnr6OerPWpf4EV86lFGwJzbFGFSm M92DxnJXf+txHrpQBTW7l/g5cyxXMvt3MT13WrOiXZrv31Zb9lKwAsvTeu4XJJV1Oj xeDwD4T2m8rcZl1MQVlkOQ8Dy58+hpU3HKFfTJQU= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Guangshuo Li , Lee Jones , Sasha Levin Subject: [PATCH 6.18 162/686] mfd: ab8500: Fix child device leaks on probe failure Date: Fri, 13 Nov 2026 10:44:55 -0500 Message-ID: <20261113153826.275098728@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261113153820.902362109@linuxfoundation.org> References: <20261113153820.902362109@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Guangshuo Li [ Upstream commit 5bf2ae8b131d4ae9c0ed5f7aa02532645f512022 ] ab8500_probe() registers MFD child devices before completing the remaining device initialization. If a later MFD registration or sysfs group creation fails, previously registered child devices are not removed. Use devm_mfd_add_devices() so registered MFD child devices are removed when probe fails. The issue was identified by a static analysis tool I developed and confirmed by manual review. Fixes: cca69b67b3ba ("mfd: Export ab8500 chip id to sysfs") Fixes: 9c717cf3fa16 ("mfd: ab8500-core: Add device for new RTC version for AB8540 cut2") Cc: stable@vger.kernel.org Signed-off-by: Guangshuo Li Link: https://patch.msgid.link/20260924144355.1604369-1-lgs201920130244@gmail.com Signed-off-by: Lee Jones Signed-off-by: Sasha Levin --- drivers/mfd/ab8500-core.c | 44 ++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c index 86fa99022cb35..44fc2ce83cdd7 100644 --- a/drivers/mfd/ab8500-core.c +++ b/drivers/mfd/ab8500-core.c @@ -1194,39 +1194,41 @@ static int ab8500_probe(struct platform_device *pdev) return ret; if (is_ab9540(ab8500)) - ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs, - ARRAY_SIZE(ab9540_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, ab9540_devs, + ARRAY_SIZE(ab9540_devs), NULL, + 0, ab8500->domain); else if (is_ab8540(ab8500)) { - ret = mfd_add_devices(ab8500->dev, 0, ab8540_devs, - ARRAY_SIZE(ab8540_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, ab8540_devs, + ARRAY_SIZE(ab8540_devs), NULL, + 0, ab8500->domain); if (ret) return ret; if (is_ab8540_1p2_or_earlier(ab8500)) - ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut1_devs, - ARRAY_SIZE(ab8540_cut1_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, + ab8540_cut1_devs, + ARRAY_SIZE(ab8540_cut1_devs), + NULL, 0, ab8500->domain); else /* ab8540 >= cut2 */ - ret = mfd_add_devices(ab8500->dev, 0, ab8540_cut2_devs, - ARRAY_SIZE(ab8540_cut2_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, + ab8540_cut2_devs, + ARRAY_SIZE(ab8540_cut2_devs), + NULL, 0, ab8500->domain); } else if (is_ab8505(ab8500)) - ret = mfd_add_devices(ab8500->dev, 0, ab8505_devs, - ARRAY_SIZE(ab8505_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, ab8505_devs, + ARRAY_SIZE(ab8505_devs), NULL, + 0, ab8500->domain); else - ret = mfd_add_devices(ab8500->dev, 0, ab8500_devs, - ARRAY_SIZE(ab8500_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, ab8500_devs, + ARRAY_SIZE(ab8500_devs), NULL, + 0, ab8500->domain); if (ret) return ret; /* Add battery management devices */ - ret = mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs, - ARRAY_SIZE(ab8500_bm_devs), NULL, - 0, ab8500->domain); + ret = devm_mfd_add_devices(ab8500->dev, 0, ab8500_bm_devs, + ARRAY_SIZE(ab8500_bm_devs), NULL, + 0, ab8500->domain); if (ret) dev_err(ab8500->dev, "error adding bm devices\n"); -- 2.53.0