From nobody Fri Sep 25 13:54:26 2026 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 5574844F579; Fri, 11 Sep 2026 12:06:35 +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=1789128397; cv=none; b=m6AL2wCPzMpJpUmy9Jc7Vv1C/oO0MLshpXKQJIKuFtXHVlJ1MQA1Z2sZ11FKUITT2DYx4szj1ydOwJNZ04t+PsB/zEnugYysugc8VnEJc6/MGwwfLKX8Qunk6PS/JIufJJVj9GvgsF3xdYC0zdQovXCrzaec1MWktRq/DnfR8No= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789128397; c=relaxed/simple; bh=RNvOEEpj3eKecL7Z7VX+MIMseXV7PqlM99djCsrXoSY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hMiN/IE++2GiPnDmrs6aqOQXikKlFbe8/Gk+/BLPg5HUZoY6OoVMAznu0971+1HoF5Pn96fcxo2bIT0fwVRe17OYC2GVnnQxM0dCQgLGzUJmVqhrSCHpeB0cjJycZMdsLGgvT++s44rZkOl6E9SQURWQn9tqJ3mCenU40Re7gk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lodwYVJo; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lodwYVJo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8EAC1F00893; Fri, 11 Sep 2026 12:06:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789128394; bh=shz1qQVQ6eIQDjkUYGPiq962KaqWAWjBoEnlAV/h5D0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lodwYVJoQe/6G4hpNOCE0Nytsgz65pqjBCiucbDhCdWyQhO+XmN8+UW1VYS80cNuQ yK4FxMh4aCzsgQvkFn030Dk5yuTrkXDwP48suKWlz7IPZyHGmKW33nik5RdgbqJ33L 5rRZYxsf5H1F2dPRC1wcFfDAI/uEl5MkE2J8CHZJiV3u4EsNi/90ejBcG62j0XdMeO 94arSax7FV0hLUgPhrzTCd2ooWuATi6051IZ48nIA+mm2h/VCJDYCHBdLRo+S4K9Bw Y5JN9B6V80AWcwjwzZGESX090a/EGUzpV7dS51fJtfWfyNkkO8tx+ffl9IH8O1Z+MN e4Ef2fmvti+tg== From: Dinh Nguyen To: bp@alien8.de, tony.luck@intel.com Cc: dinguyen@kernel.org, linux-edac@vger.kernel.org, rounakdas2025@gmail.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCHv5 1/4] EDAC/altera: Do not allow driver unbinding Date: Fri, 11 Sep 2026 07:06:24 -0500 Message-ID: <20260911120627.2634225-2-dinguyen@kernel.org> X-Mailer: git-send-email 2.42.0.411.g813d9a9188 In-Reply-To: <20260911120627.2634225-1-dinguyen@kernel.org> References: <20260911120627.2634225-1-dinguyen@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The EDAC driver must remain bound; unbinding and re-binding it would erase active system memory. Remove the .remove functions because they will not ever get used. Fixes: 588cb03ea208 ("EDAC, altera: Add Arria10 L2 Cache ECC handling") Cc: stable@vger.kernel.org Signed-off-by: Dinh Nguyen --- v5: no changes v4: rebased to edac-urgent v3: simplify commit messsage v2: reworked v1 to include only true sashiko hits --- drivers/edac/altera_edac.c | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 68846f583eeef..fe501c89dd0dc 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -453,15 +453,6 @@ static int altr_sdram_probe(struct platform_device *pd= ev) return res; } =20 -static void altr_sdram_remove(struct platform_device *pdev) -{ - struct mem_ctl_info *mci =3D platform_get_drvdata(pdev); - - edac_mc_del_mc(&pdev->dev); - edac_mc_free(mci); - platform_set_drvdata(pdev, NULL); -} - /* * If you want to suspend, need to disable EDAC by removing it * from the device tree or defconfig. @@ -481,13 +472,13 @@ static const struct dev_pm_ops altr_sdram_pm_ops =3D { =20 static struct platform_driver altr_sdram_edac_driver =3D { .probe =3D altr_sdram_probe, - .remove =3D altr_sdram_remove, .driver =3D { .name =3D "altr_sdram_edac", #ifdef CONFIG_PM .pm =3D &altr_sdram_pm_ops, #endif .of_match_table =3D altr_sdram_ctrl_of_match, + .suppress_bind_attrs =3D true, }, }; =20 @@ -517,6 +508,7 @@ static struct platform_driver altr_edac_driver =3D { .driver =3D { .name =3D "socfpga_ecc_manager", .of_match_table =3D altr_edac_of_match, + .suppress_bind_attrs =3D true, }, }; module_platform_driver(altr_edac_driver); @@ -803,22 +795,12 @@ static int altr_edac_device_probe(struct platform_dev= ice *pdev) return res; } =20 -static void altr_edac_device_remove(struct platform_device *pdev) -{ - struct edac_device_ctl_info *dci =3D platform_get_drvdata(pdev); - struct altr_edac_device_dev *drvdata =3D dci->pvt_info; - - debugfs_remove_recursive(drvdata->debugfs_dir); - edac_device_del_device(&pdev->dev); - edac_device_free_ctl_info(dci); -} - static struct platform_driver altr_edac_device_driver =3D { .probe =3D altr_edac_device_probe, - .remove =3D altr_edac_device_remove, .driver =3D { .name =3D "altr_edac_device", .of_match_table =3D altr_edac_device_of_match, + .suppress_bind_attrs =3D true, }, }; module_platform_driver(altr_edac_device_driver); @@ -2214,6 +2196,7 @@ static struct platform_driver altr_edac_a10_driver = =3D { .driver =3D { .name =3D "socfpga_a10_ecc_manager", .of_match_table =3D altr_edac_a10_of_match, + .suppress_bind_attrs =3D true, }, }; module_platform_driver(altr_edac_a10_driver); --=20 2.42.0.411.g813d9a9188 From nobody Fri Sep 25 13:54:26 2026 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 EEBCE7E0E4; Fri, 11 Sep 2026 12:06:36 +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=1789128400; cv=none; b=aJ+PHHHPEy+hOBMKzEIKOGlarL/IyZM2qUZChBZuoQtXBVkCHR6TJi1VeFTxbG2tX6SQN4d/DdWNsPPdltYtYoMJE6jCp8Y9eYwj+mIsF8pitq18a2VDShW12fqUYdNATxtUNauYrG4Mbls4yM6Vrx7Ml4tCIZpR7+OCozFPMK0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789128400; c=relaxed/simple; bh=0M6DE4Vpn8wYzr52juZIp3gGE0Z9VWQK+lkvcA71kpo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=daG1Fuxo1BlWk9nE8Fsz7qi8Y5FiYGuvtB+TaJ02Y57odTik1c6HupMsoL6JLbjcF3zMUmEuszyygl6En/BaU0WMEQhYMXYqnvjmvNLtQJwlQw7Z/+vh4V75CiXP8DmZnEARb6lM9en4inG6DDKAjJxUThiiclXiqMxa2ebGOrM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V371wl+q; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="V371wl+q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9662F1F00899; Fri, 11 Sep 2026 12:06:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789128395; bh=cCPYH56FM+XGcXAL9mtAocmMXfUZmjksWUv2xr1J/Lg=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=V371wl+q561M1XGsZsUpduUk0l3X7l+4Ldc8Hjj3njiVLYRL62NVK1xF6DfsNp+GC Ww4e1fJ00SCBlD/b+/ZbfsiTDFu33GHfuloMOj/if2qcjE2P5iUtLvgKfpz9gXeBi2 1CiAkvdNRS2FPgUVamcI61EikdLRiu8CfKfbxfaUHpG2T5qH1jQdztCAhaZtJNtLHg VpFmTK/5FfwCIn1Db3LD427OXf1PpHTm/2E0LDjkB1vQvrmYDfEtOpsLeAwdBfsIwC BISeQDyCPrExUZVojJAZwJXcOFFTwsYQK3KAD8xi+8fHwbbkrdOmVoPo7i/qGYdDeD 3wSBv6wivIQBQ== From: Dinh Nguyen To: bp@alien8.de, tony.luck@intel.com Cc: dinguyen@kernel.org, linux-edac@vger.kernel.org, rounakdas2025@gmail.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCHv5 2/4] EDAC/altera: Drop __init from ECC setup paths for re-probe safety Date: Fri, 11 Sep 2026 07:06:25 -0500 Message-ID: <20260911120627.2634225-3-dinguyen@kernel.org> X-Mailer: git-send-email 2.42.0.411.g813d9a9188 In-Reply-To: <20260911120627.2634225-1-dinguyen@kernel.org> References: <20260911120627.2634225-1-dinguyen@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" sashiko reports: Does suppressing sysfs unbinding fully prevent the execution of freed __init memory? If altr_sysmgr_regmap_lookup_by_phandle() returns -EPROBE_DEFER, the probe is deferred until after __init memory is freed. The a10 EDAC .setup callbacks (sdmmc, ethernet, nand, dma, usb, qspi) and their helpers (altr_init_a10_ecc_device_type, altr_init_a10_ecc_block) were marked __init. These run from the probe path, which may execute after init memory is freed -- e.g. a probe deferred via -EPROBE_DEFER that only succeeds once a late/module dependency appears, or a manual unbind/rebind. Calling __init code then dereferences freed memory. Remove __init so these functions remain valid at runtime. Assisted-by: Cursor:claude-4.8-opus Fixes: 788586efd116 ("EDAC/altera: Initialize peripheral FIFOs in probe()") Cc: stable@vger.kernel.org Signed-off-by: Dinh Nguyen --- v4: rebased to edac-urgent v3: no changes v2: reworked v1 to include only true sashiko hits --- drivers/edac/altera_edac.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index fe501c89dd0dc..d8a3438fb5f44 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -926,7 +926,7 @@ static int __maybe_unused altr_init_memory_port(void __= iomem *ioaddr, int port) return ret; } =20 -static __init int __maybe_unused +static int __maybe_unused altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask, u32 ecc_ctrl_en_mask, bool dual_port) { @@ -1001,7 +1001,7 @@ altr_init_a10_ecc_block(struct device_node *np, u32 i= rq_mask, =20 static int validate_parent_available(struct device_node *np); static const struct of_device_id altr_edac_a10_device_of_match[]; -static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compa= t) +static int __maybe_unused altr_init_a10_ecc_device_type(char *compat) { int irq; struct device_node *child, *np; @@ -1330,7 +1330,7 @@ static const struct edac_device_prv_data a10_l2ecc_da= ta =3D { =20 #ifdef CONFIG_EDAC_ALTERA_ETHERNET =20 -static int __init socfpga_init_ethernet_ecc(struct altr_edac_device_dev *d= ev) +static int socfpga_init_ethernet_ecc(struct altr_edac_device_dev *dev) { int ret; =20 @@ -1360,7 +1360,7 @@ static const struct edac_device_prv_data a10_enetecc_= data =3D { =20 #ifdef CONFIG_EDAC_ALTERA_NAND =20 -static int __init socfpga_init_nand_ecc(struct altr_edac_device_dev *devic= e) +static int socfpga_init_nand_ecc(struct altr_edac_device_dev *device) { int ret; =20 @@ -1390,7 +1390,7 @@ static const struct edac_device_prv_data a10_nandecc_= data =3D { =20 #ifdef CONFIG_EDAC_ALTERA_DMA =20 -static int __init socfpga_init_dma_ecc(struct altr_edac_device_dev *device) +static int socfpga_init_dma_ecc(struct altr_edac_device_dev *device) { int ret; =20 @@ -1420,7 +1420,7 @@ static const struct edac_device_prv_data a10_dmaecc_d= ata =3D { =20 #ifdef CONFIG_EDAC_ALTERA_USB =20 -static int __init socfpga_init_usb_ecc(struct altr_edac_device_dev *device) +static int socfpga_init_usb_ecc(struct altr_edac_device_dev *device) { int ret; =20 @@ -1450,7 +1450,7 @@ static const struct edac_device_prv_data a10_usbecc_d= ata =3D { =20 #ifdef CONFIG_EDAC_ALTERA_QSPI =20 -static int __init socfpga_init_qspi_ecc(struct altr_edac_device_dev *devic= e) +static int socfpga_init_qspi_ecc(struct altr_edac_device_dev *device) { int ret; =20 @@ -1598,7 +1598,7 @@ static int altr_portb_setup(struct altr_edac_device_d= ev *device) return rc; } =20 -static int __init socfpga_init_sdmmc_ecc(struct altr_edac_device_dev *devi= ce) +static int socfpga_init_sdmmc_ecc(struct altr_edac_device_dev *device) { int rc =3D -ENODEV; struct device_node *child; --=20 2.42.0.411.g813d9a9188 From nobody Fri Sep 25 13:54:26 2026 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 F11D435F170; Fri, 11 Sep 2026 12:06:36 +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=1789128398; cv=none; b=Dx5ZuwkoDtXc3kJuQ9zL4lmWT3Y9zrOsFYPJazo8u/Fl+8L3pffbyq8JAsc8yIKDcpADrQy6lxkonIfYTrZnGb6+yLyhKQZ07cTZBg9fnBOKNbYNI21KvqedHOTTMpPDzRewEDIRoOSKUFnW9V4YliYkznAfPmCbjAv/JY9uPMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789128398; c=relaxed/simple; bh=S5i2kFHa2lCIsrFoOaKdSys03HuTz4Df1rLQT9Zb3cw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FTKwtxJd8gUKn7xwzE4x+Gq3n2o+3wthdSkRmqDaJLRcjs9+xlC82x3iXPQ8Xn/F0qdja1H/ynPYPfo2a2E6+qVdaAGW3QekH/BXb3eIu2ENzjCwXFwAXhNcTuG1rw5zNOAw8mOTc6gXOK/UmG4liL4wz8SndDeB8IhtA7aFlt8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mBWQnN+y; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mBWQnN+y" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 80E831F00898; Fri, 11 Sep 2026 12:06:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789128396; bh=PvNORlvLHsmxunMJ1CQzAPAm3uXM3Ldh9UdzKdd90zE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=mBWQnN+yW6EbD7cGh8duOeUB6FO82QrU85ietJUUd8kpJnDAdH0dPiY4TMTnfaadT gmDfhsbdeUmYULdPj74uU5jxdA8ujTXycO9Dvk+PRzhQB3o2t/3plZnew1SUoKUke5 JN5+EfmVT8quUWL3OlKx39B+Uk317eXgCZHRxUIpdKzqd0uJtOcF1xTsMTH5/lWUdt OG0AGadLp8+l2HZ5EUArXALIzb51X0iLFYQUouONOfgbCv+imfrI7QCgPopkHlASRT iJ2hFl7S3FbulM5pgPqFT3usb2nPmrKoAjQKCOM2i15CBSHdjJWaI0Dn1qT1SwQhSQ ibk3YysuMCQjw== From: Dinh Nguyen To: bp@alien8.de, tony.luck@intel.com Cc: dinguyen@kernel.org, linux-edac@vger.kernel.org, rounakdas2025@gmail.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCHv5 3/4] EDAC/altera: Fix code leak on dci allocation failure Date: Fri, 11 Sep 2026 07:06:26 -0500 Message-ID: <20260911120627.2634225-4-dinguyen@kernel.org> X-Mailer: git-send-email 2.42.0.411.g813d9a9188 In-Reply-To: <20260911120627.2634225-1-dinguyen@kernel.org> References: <20260911120627.2634225-1-dinguyen@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" sashiko reports: If devres_open_group() fails, the function returns -ENOMEM without freeing the dci structure allocated earlier with edac_device_alloc_= ctl_info(). Free the dci structure if devres_open_group() fails. Fixes: c3eea1942a16 ("EDAC, altera: Add Altera L2 cache and OCRAM support") Cc: stable@vger.kernel.org Signed-off-by: Dinh Nguyen --- v5: add missing } to fix build v4: rebased to edac-urgent v3: No changes v2: reworked v1 to include only true sashiko hits --- drivers/edac/altera_edac.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index d8a3438fb5f44..ccdfb35178b69 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -1516,8 +1516,10 @@ static int altr_portb_setup(struct altr_edac_device_= dev *device) altdev =3D dci->pvt_info; *altdev =3D *device; =20 - if (!devres_open_group(device->edac->dev, altr_portb_setup, GFP_KERNEL)) + if (!devres_open_group(device->edac->dev, altr_portb_setup, GFP_KERNEL)) { + edac_device_free_ctl_info(dci); return -ENOMEM; + } =20 /* Update PortB specific values */ altdev->edac_dev_name =3D ecc_name; --=20 2.42.0.411.g813d9a9188 From nobody Fri Sep 25 13:54:26 2026 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 7BC2745D92E; Fri, 11 Sep 2026 12:06:37 +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=1789128399; cv=none; b=DW8OO/6EZ3E+NAUzOobDPAHIbKYrMwOg2g5Gj46+8k9NAXGgHaklCWrzheivhU7wtbgjdGdpPb69iNYJ08J0JFoLzl/zzMFIntbWe8r77RFZmOrrka0dJA+tmGiqg1a/nl2WGwoxdP/5mLRyLusmGcS0CsI93jP74eyCrmiCwoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789128399; c=relaxed/simple; bh=ryKKO7OTETC8QH5cwxHp5tX6KpxhABa+DLB0H2vUuqc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iIZbfob4Z9LEQ89SOoa87G63WaPTGTUN5i+NPfM7RWRZgdoOMz0GD1AqVpuAF89InRqVEbqYpHm6Gk4alxKYGY9kdADG/CNffzASP9VvHCbvQLI/2L6Ata1/9obrQsWW1HOms4BwP1GbQYT2l2O9e46sJL0GTVpoj8uHn07FWZw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JUuOUkFh; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JUuOUkFh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6971A1F0089B; Fri, 11 Sep 2026 12:06:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789128397; bh=fcgNY5TKlHEn7fX6OLEcfCh1tO1NGblSwkQuHMNwqY8=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=JUuOUkFhSB8BoyTvfEAeHn8yCAsugBdkYS3CJQhP2faY5F11gQ5UQhIWN2mXrT8vi vTu6vRf0oTRpOkPlFXm2OoA+jTbHUnb+l8khJBgiGDMHp3RxUnxwc9cHahQrRCQvxo icMaKi0p/kr6cqTJ8SSyDeXKtbPU46b0AYO7ApW/iUhXnWcxxpQiIm2jOItwWmCnWV xwIFINFUfnYIkoMvi3Jx0vE5p8ZL6Ip1P8v1OqtedbZMp1tQKOihFKJhja62QTC13J r1QLGYwDGo/0RaMuWv335Ljl+Z3Kl9Se/2cmjLFKSmt+vWCu8SYRHHRnobf9B5lZlH 4kRujskOQtIZQ== From: Dinh Nguyen To: bp@alien8.de, tony.luck@intel.com Cc: dinguyen@kernel.org, linux-edac@vger.kernel.org, rounakdas2025@gmail.com, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: [PATCHv5 4/4] EDAC/altera: Fix use-after-free in error paths Date: Fri, 11 Sep 2026 07:06:27 -0500 Message-ID: <20260911120627.2634225-5-dinguyen@kernel.org> X-Mailer: git-send-email 2.42.0.411.g813d9a9188 In-Reply-To: <20260911120627.2634225-1-dinguyen@kernel.org> References: <20260911120627.2634225-1-dinguyen@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In both altr_edac_a10_device_add() and altr_portb_setup(), the error path freed the dci structure before releasing the devres group. Since the managed single and double bit IRQ handlers use altdev(dci->pvt_info) as their data,= an IRQ firing between freeing dci and unregistering the IRQs could dereference the freed memory. Release the devres group first so the managed IRQs are unregistered before the dci structure is freed. Assisted-by: Cursor:claude-4.8-opus Fixes: 911049845d70 ("EDAC, altera: Add Arria10 SD-MMC EDAC support") Fixes: 588cb03ea208 ("EDAC, altera: Add Arria10 L2 Cache ECC handling") Closes: https://sashiko.dev/#/patchset/20260719211238.589402-1-rosenp%40gma= il.com Cc: stable@vger.kernel.org Signed-off-by: Dinh Nguyen --- v5: No changes v4: rebased to edac-urgent v3: No changes v2: reworked v1 to include only true sashiko hits --- drivers/edac/altera_edac.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index ccdfb35178b69..4c20fb9261608 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -1593,8 +1593,13 @@ static int altr_portb_setup(struct altr_edac_device_= dev *device) return 0; =20 err_release_group_1: - edac_device_free_ctl_info(dci); + /* + * Release the devres group first so the managed IRQs are + * unregistered before dci (which contains the IRQ handler's + * data via dci->pvt_info) is freed, avoiding a use-after-free. + */ devres_release_group(device->edac->dev, altr_portb_setup); + edac_device_free_ctl_info(dci); edac_printk(KERN_ERR, EDAC_DEVICE, "%s:Error setting up EDAC device: %d\n", ecc_name, rc); return rc; @@ -1997,9 +2002,17 @@ static int altr_edac_a10_device_add(struct altr_arri= a10_edac *edac, return 0; =20 err_release_group1: + /* + * Release the devres group first so the managed IRQs are + * unregistered before dci (which contains the IRQ handler's + * data via dci->pvt_info) is freed, avoiding a use-after-free. + */ + devres_release_group(edac->dev, NULL); edac_device_free_ctl_info(dci); + goto err_print; err_release_group: devres_release_group(edac->dev, NULL); +err_print: edac_printk(KERN_ERR, EDAC_DEVICE, "%s:Error setting up EDAC device: %d\n", ecc_name, rc); =20 --=20 2.42.0.411.g813d9a9188