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=1794590975; b=h8YT/2yUUeL6IjhabzUgVeP7x+7auyi9zjKljDceUv25KTDJNFxPgr2c+WnufN6rIdMY IuFn0kNtCldC+3WBN9NoFb/Jj27lvEJ6Fityihgv+UmS5yAB+dbDQwH/mAoYWuVvGs9NO qkvuqAxHKlQ8HxSiHyClUjiGOyk7FtUquD/UN9G3WpTHMVjVchhcypYAB8N7pRbmbHwT9 fJC79bUELvSbwedj/Uv+p9YTPwhSMZ9hXjuBm9HFPLaslQ8BwtNxN27Uru675+nPWaWtT yyji9/Z+iM46SLiADgR6b5zC6tmONpcPjo3rk3wjHxZpDZQe9gRi6rob2MvlIhPzaPA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794590975; 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=QiuNh/A0AhFQGUEWVGqY6YZdVr8QcIGYxRDkUGt+0BY=; b=PEFaKjtY1HeFaDFpmNlwpGp1AiolWLl6UT+gOhwdLk5IsWXyzI0QWVZJQK8oyROXjgRF e4gaQDe2GJU/tadMnORpIFcWYV/QkCbHhC5X4uE05EwojVa9mXXWloMsj+YcAMa5u7H1z aOzLln7ikm2F//S/kBKjWIHzVjmeFQxAB24R4ObmvwmaRCZSFrNamSbvK5floDKqlqLKR /qR/Ok4x+yJLQhdjP9mhZibEspDpCbNTGTfXqKYKgAT4C3ExSuJtFiSmqfkUnhdRwa54T hMGiGJbFE6VN5P4ws0EwM+mWMYd3lMETf4Rv3+itcDQ8fXS1pEA1ZAbQ7JMW1kN82Tg== 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=Vi+RTbxk; 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 42D01606B476; Fri, 13 Nov 2026 17:29:35 +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=Vi+RTbxk Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1F3E1F000C5; Fri, 13 Nov 2026 17:29:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794590975; bh=QiuNh/A0AhFQGUEWVGqY6YZdVr8QcIGYxRDkUGt+0BY=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Vi+RTbxkZo9hqWRbfLXk2WgHd/ts8A7ERpFl6GG3KbzkLRaatmIum/DE6xWwVRTY8 zeM1IC+iiGEwRE27ljvMhEhvPuT/l1xsmgfKef8qpBN3yL4ZooDNe85XXfF1IKRWcZ x1IPvXKG+inxljGnK4Jpfj9ZTVV1z0LU/E8ibpKc= 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.12 153/670] mfd: ab8500: Fix child device leaks on probe failure Date: Fri, 13 Nov 2026 10:45:17 -0500 Message-ID: <20261113153817.264170350@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261113153811.177190860@linuxfoundation.org> References: <20261113153811.177190860@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: patches@lists.linux.dev List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.12-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 17c90850946bc..53d2b117058c3 100644 --- a/drivers/mfd/ab8500-core.c +++ b/drivers/mfd/ab8500-core.c @@ -1195,39 +1195,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