From nobody Sat Jul 25 03:46:04 2026 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 528482E06ED for ; Sun, 19 Jul 2026 19:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784490018; cv=none; b=YXGcVBXhfHuSXsTb+Jf1vs+I8mNj+gukTh+m8LpgvJ74Th/8M7mZ7Emo3lrQEapDpCwKb3IPH0Sw5tTwWrIeQhqIdh3KfdM/+pTVYIGQVMd3gyIoyB5TnZZgMY4Rzz0Om2zlXkX+X68jPUlsN/Wgn94GHhAXUzM5A3J8W4Aq5CI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784490018; c=relaxed/simple; bh=ifU1kMZfngVDHcvrjk0awPR30T+Cgv/d0HA1XGLTU7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lb/HPWixx5cRdt55U2yssThNTPHXw+5F/I4LVtpQcMF/qLbmkFUOvhrCZnALA+d/rSDFCA7souPmdBzMKEcNIA5G/fqb2hrncT3JmV+vflIPu1S/grCiuyImmJiBIC67IG4eId91+N9VCnbAIEp7DF55shIrswNyEZjwo1kIIC4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mcxORIR6; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mcxORIR6" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-38dfe7eb825so4759266a91.0 for ; Sun, 19 Jul 2026 12:40:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784490017; x=1785094817; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=VSIQ5/dAG3XXTro4N8Y7fM6rRNG5QM3A2gVdghbdtAs=; b=mcxORIR6tX2kEE8pf4cv6Ql0wJQtXD/6PapYkl6Hlov0p0+AOlKKnELkt6Fp7VqjCM 1ILaB+bTUZ0D65lDz1+dX0WYBFrb6EY6JMJYLrkwXTamByWsnkUzmMplGAqCmDtGkW7Z iQTx9cLaxErrmujo3ecuy1AW6A+HdjYHkVxWGJVuh+YW2zIGF8DMw1YUIfySVh+bBRia GRpCXyAJQsMg3DUAXVcp6krHEzmR0/ujoySJWQhW0JgwwwYQruxFVj2zoRvXjNNe3MIF +nswG8MwzqotKTTS8GFGE7svsloHhAkQbLqSe/64bo/Ff+s9Eb+n/COiY0ra5uEzgjPl OmaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784490017; x=1785094817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=VSIQ5/dAG3XXTro4N8Y7fM6rRNG5QM3A2gVdghbdtAs=; b=DcNOFVc+L9cNALS6ZnxyDfP56aME0OXG2J9fASAIXqW/FPyJC9TYHt8TslJuAbxotK QXXablRLBIMRAFNJqb4xYN7ZhVOfJ7HdKRzQ3n+RTJnJw80gdmrxIs1Zmmzjjb3UxIW0 pkWiOQCjuOQ2US9SxfUhTInIOZ124d2X7Oss0xNIUqE0VidBxIagThfeyzfBQ3zzv4RE U1DtQcUmv5W3iRbGEX83+4lJoL8UeiDzKXfZDmVIVlk6FxH4axckK/10/kxAJQ0+NdJV QiLMakhZzLdjWlE7PvOJn6weMUIv8QXKFOs9nq1dTPddHp5SxPgJkNvWadULwIo2XKGg H7aw== X-Forwarded-Encrypted: i=1; AHgh+Rr/VmrEAk6cX63v1Q2L6Lak7AF+0kKTbOY60cq1ARWdXY8l3H5idw0ydcXvigDZsTfbvQsMgl5dzR1pRPo=@vger.kernel.org X-Gm-Message-State: AOJu0YxbqSP1811dqzGPMfoW38plrpja5ktiz8Pkp3U5ytpdzj8tL7OE eqACihZg+J9PEfm68R4W4Rrc+8u+nQjhPBxotj8M9gx52rXj7M6XC9he X-Gm-Gg: AfdE7cn2sNk5nZ7eqMwfJO8uQiANlCxHpSzxB14tyosMLnVEHhcktHamA9cy+uYAYl6 ClrBSCe6VehKm48rCpiox6NBS+v0Q5ew8hw9ZZwjLnxOfv4Xpp0i9qID/YcQ+usha99y2fT+L0b tGrZ60FVt6hgqUkVqKUYd1YGQvCNMGYzyJZzueGERInV1ZtbOgS3dWcMcakdRmnHL5agl1Ql+zD YJpYewXkDyOscF+3eu3cUQt2q+7U5N6E5+yiQtbUPdeJ5D4mD/7CTK2TN3YoXRdaCALwwTusDxw O58beif3HEgw3zYEAECi1JbF7hoNGUQc0anEbnPBYUfb+8j9t2HtKgFsOdAswwT3wCZsazsd1dK uQOZHM7puQ5fZMjRm++x9M/noL72XmTDGon7p4TQkxBFlGfScCyATOwHMpG94YNoX6SSumJh4QB r4JNN6g9GLEW+XD5thvpe0Cosvw29g0t7lYj/XmKVmtmWtToEFBRofSYJ1+7VIXvT7EiayFglzI scr8V+YO1MrdAmxclKrm7bh258MnE7VgqyBaFN6QOSicef3OWxyK/k= X-Received: by 2002:a17:90b:57ee:b0:383:f52b:d616 with SMTP id 98e67ed59e1d1-38e4b40292cmr12031474a91.10.1784490016674; Sun, 19 Jul 2026 12:40:16 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38e3a0fb993sm6308126a91.15.2026.07.19.12.40.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 12:40:15 -0700 (PDT) From: Rosen Penev To: linux-edac@vger.kernel.org Cc: Frank Li , Borislav Petkov , Tony Luck , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , York Sun , imx@lists.linux.dev (open list:EDAC-FSL_DDR), linux-kernel@vger.kernel.org (open list), llvm@lists.linux.dev (open list:CLANG/LLVM BUILD SUPPORT:Keyword:\b(?i:clang|llvm)\b) Subject: [PATCH 1/2] EDAC: fsl_ddr: restore MC error registers on probe failure Date: Sun, 19 Jul 2026 12:40:08 -0700 Message-ID: <20260719194009.117532-2-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260719194009.117532-1-rosenp@gmail.com> References: <20260719194009.117532-1-rosenp@gmail.com> 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" fsl_mc_err_probe() clears FSL_MC_ERR_DISABLE and, in EDAC_OPSTATE_INT mode, sets FSL_MC_ERR_INT_EN to enable error reporting. If a later initialization step fails and jumps to the err/err2 labels, the cleanup only frees driver memory and does not restore these hardware registers. This leaves the memory controller configured to generate interrupts while no handler is successfully registered, which can cause an unhandled interrupt storm on the shared IRQ line. Restore FSL_MC_ERR_DISABLE, FSL_MC_ERR_INT_EN and the SBE threshold in both error paths. Initialize the orig_ddr_err_disable/orig_ddr_err_sbe save fields up front so the error paths are safe even when they are reached before the INT block populates them. Built for arm64 (defconfig + CONFIG_EDAC_FSL_DDR) with LLVM=3D1; drivers/edac/fsl_ddr_edac.o compiles cleanly. Fixes: ea2eb9a8b620 ("EDAC, fsl-ddr: Separate FSL DDR driver from MPC85xx") Assisted-by: opencode:hy3-free Signed-off-by: Rosen Penev --- drivers/edac/fsl_ddr_edac.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/edac/fsl_ddr_edac.c b/drivers/edac/fsl_ddr_edac.c index b27dff96aeb6..b1e6e177b088 100644 --- a/drivers/edac/fsl_ddr_edac.c +++ b/drivers/edac/fsl_ddr_edac.c @@ -518,6 +518,8 @@ int fsl_mc_err_probe(struct platform_device *op) =20 pdata =3D mci->pvt_info; pdata->name =3D "fsl_mc_err"; + pdata->orig_ddr_err_disable =3D 0; + pdata->orig_ddr_err_sbe =3D 0; mci->pdev =3D &op->dev; pdata->edac_idx =3D edac_mc_idx++; dev_set_drvdata(mci->pdev, mci); @@ -645,7 +647,11 @@ int fsl_mc_err_probe(struct platform_device *op) =20 err2: edac_mc_del_mc(&op->dev); + ddr_out32(pdata, FSL_MC_ERR_INT_EN, 0); err: + ddr_out32(pdata, FSL_MC_ERR_DISABLE, + pdata->orig_ddr_err_disable); + ddr_out32(pdata, FSL_MC_ERR_SBE, pdata->orig_ddr_err_sbe); devres_release_group(&op->dev, fsl_mc_err_probe); edac_mc_free(mci); return res; --=20 2.55.0 From nobody Sat Jul 25 03:46:04 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DD5F2EEE9B for ; Sun, 19 Jul 2026 19:40:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784490022; cv=none; b=A2W8y4r4F7qYFjeisPVsn1HUl9pMuXVj+wHbJfRPEe5QmPLKQ/mplPlXTFK2X2QXgKlNqoh/UUdG3mGScsEn0saHWelKvzEJXX62BMl2MQZtpRQ6gkO9Hwp9lgb6N7ZXw31eifumCWMSNsHgIFrgNfacaf9AiYVXyV7EU0yFQnQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784490022; c=relaxed/simple; bh=TLJtucb+fMTnZkK3MG1MYEdha1u6aPFM1hXEkh/SJAc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BFxvUb8iI8vnbYtgTdpAZXXobcob0lz1bunf3UnWuUEgEG/Il091CBIxJ75H1ASDofzi0HqtGNfvC0HjRJ/hwsONhe2BaY00zWkp2sa2VNNuvTZOTMBlBJaIP7azqAmOTmuGjGxtHC0UzIYYfoirg5ZcmzXDxKOv7EPpcf4Pf3w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DwCPQnG6; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DwCPQnG6" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso6995722a91.1 for ; Sun, 19 Jul 2026 12:40:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784490020; x=1785094820; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JHDTeZIldDDYJIkvsl14Ioncr+9aGn9+y+1u1DznXfQ=; b=DwCPQnG6CtKfQ5VhtW2rdF6WiQuv0YWCJNt11UzsqCXi09TvmjkPXxdKIl5ENu5Sp0 q5ypT5Vev04wTuksDHZcbFkh5C3AvHJ0H93pG16Uasj1DC2wDPeXjz5pcScX31mfrfbo vgAw0r+DwKaFNuAXTRwTKKfm0L9oFXoj3CFeqIsrzGFZ4E98JquYPPDGVBo04Ni4jcr3 JU/5qRTvJ0VHt4GTDLptcDLz1lJ9B7FWsHHGQRELHnOmERHLDxmBZaEz8Gyn2i8IJI5O 3PiPvKN+WwjW9gaTddhN8kBJve8gaziVUM4gDby83FUd8ST0J4H7mKOl0noVO7yVzmyN Py2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784490020; x=1785094820; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=JHDTeZIldDDYJIkvsl14Ioncr+9aGn9+y+1u1DznXfQ=; b=SI4fnRIb79dXjMmtVQSSkxS9K/9gyifLuNqi04MOp8jsgxdAxX7vbcjn0bEislJ1Ls Pi3bBp7wbFoOkJ9u1xrghPBzUTjLnC0Pe13aGbJ1+aEsNFoSZoaVeWxEtfI69VIYyWUC UcJ6t3QnRBsNT808ecsV1vQyKwvTqUUgYBBndQXs35pXKKQpe9BfXAB9VclwjVw/WTDw +jEVrmwnSfis+WaKhOjC5Rm1hV7/yDQFyrtR53H3vrpIoCowmv+H2utReim6xLb+WSFZ 5CXueWohRQhCwhYutVDqHH8/oWt1MIB9N/afCQXc5TjAffQUr+j8+mPLZ8TMem+i1Stt AIEQ== X-Forwarded-Encrypted: i=1; AHgh+Ro/aIo0oblncs8eN6SUmJzbtTrd8cByVsJBSuh8H8atd2jUfKSY7eoDhxMSHDZDw49R94oPyCSICzm6VZ0=@vger.kernel.org X-Gm-Message-State: AOJu0YxfUNnxOCtB+FWgPpPGXn5AOzQjy6lydvkFoACg+2wkWYAWd09F uirMnO/0ZwglsOwjJfSrWKlEvDwQQehw+FEcfmucn7aiiYGcVNU1N5CE X-Gm-Gg: AfdE7cnZY8+BOw0Sxuml3sCf5xue0ISNUBPRWGkzQPxcB8iHiFZsUEluZwxrKc07SaD 7u0/6ztftQhXCxTepZRDmNp+ngOpNL2nlh+LBTg5stOQg0MhcqQErtmg4CxygfB8EKZ3IYWWQ60 tD7/3M2kCuMK8YlF1HSLiL3okOOHl7c7q3LeorUFvW6ixtLrDM3ZzRBho4o9YIdYuUwomXHtZVy ZzHbQUns/qDg7oz9frxI1HegF+2FBvPAyWKn6F27Gb5UBOYFZk4FAbeuXblOcdS4IikmZKgE0Rl GiW0hkn8qS21JW0hAWP0D4I1z5N2okwg2/dtu+1LUVRoe1S7PX1jLOKSMUtKxPM77e+couNxGtB TlLsjB1PaYjgGQQVtTeaZfM61gF6HKcgyo8XO9Q+K/D/tui8nkiDs1m44/3dkwn1BWH6/8dJsUZ x3H4FJUp6FAB1TNr2PVyaPUk3hav1S++1UioeIG5/ckjg87jZrbHdkJYm69hWTQFg2wMBz4AXGJ h0moS4rs3z5HL9Hn2fpv2z9KYKY0l1ZeVwcHi6/3MAHCdv04fUvhos= X-Received: by 2002:a17:90b:2f0c:b0:38e:49c0:75a7 with SMTP id 98e67ed59e1d1-38e4b431074mr12281543a91.8.1784490019784; Sun, 19 Jul 2026 12:40:19 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e35]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38e3a0fb993sm6308126a91.15.2026.07.19.12.40.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2026 12:40:17 -0700 (PDT) From: Rosen Penev To: linux-edac@vger.kernel.org Cc: Frank Li , Borislav Petkov , Tony Luck , Nathan Chancellor , Nick Desaulniers , Bill Wendling , Justin Stitt , York Sun , imx@lists.linux.dev (open list:EDAC-FSL_DDR), linux-kernel@vger.kernel.org (open list), llvm@lists.linux.dev (open list:CLANG/LLVM BUILD SUPPORT:Keyword:\b(?i:clang|llvm)\b) Subject: [PATCH 2/2] EDAC: fsl_ddr: manage mci lifetime via devres to fix remove UAF Date: Sun, 19 Jul 2026 12:40:09 -0700 Message-ID: <20260719194009.117532-3-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260719194009.117532-1-rosenp@gmail.com> References: <20260719194009.117532-1-rosenp@gmail.com> 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" fsl_mc_err_probe() requests the shared interrupt with devm_request_irq(), passing mci as the handler context. At removal fsl_mc_err_remove() calls edac_mc_free(mci) explicitly, but the devm-requested IRQ is only torn down by devres afterwards. Between edac_mc_free() and the IRQ release, another device sharing the line can fire and fsl_mc_isr() will dereference the freed mci and its pdata. Register an edac_mc_free() callback via devm_add_action_or_reset() right after edac_mc_alloc(), so mci is owned by devres and freed only after the devm IRQ is released (devres runs actions in LIFO order). Drop the explicit edac_mc_free() from both the probe error paths and fsl_mc_err_remove(); edac_mc_del_mc() is still called explicitly at remove time so the edac device is unregistered before the deferred free. This also lets the now-redundant devres group open/release/remove calls be removed. Built for arm64 (defconfig + CONFIG_EDAC_FSL_DDR) with LLVM=3D1; drivers/edac/fsl_ddr_edac.o compiles cleanly and passes checkpatch --strict. Fixes: ea2eb9a8b620 ("EDAC, fsl-ddr: Separate FSL DDR driver from MPC85xx") Assisted-by: opencode:hy3-free Signed-off-by: Rosen Penev --- drivers/edac/fsl_ddr_edac.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/drivers/edac/fsl_ddr_edac.c b/drivers/edac/fsl_ddr_edac.c index b1e6e177b088..cdd129bc42c7 100644 --- a/drivers/edac/fsl_ddr_edac.c +++ b/drivers/edac/fsl_ddr_edac.c @@ -490,6 +490,13 @@ static void fsl_ddr_init_csrows(struct mem_ctl_info *m= ci) } } =20 +static void fsl_mc_edac_free(void *data) +{ + struct mem_ctl_info *mci =3D data; + + edac_mc_free(mci); +} + int fsl_mc_err_probe(struct platform_device *op) { struct mem_ctl_info *mci; @@ -500,9 +507,6 @@ int fsl_mc_err_probe(struct platform_device *op) u32 sdram_ctl; int res; =20 - if (!devres_open_group(&op->dev, fsl_mc_err_probe, GFP_KERNEL)) - return -ENOMEM; - layers[0].type =3D EDAC_MC_LAYER_CHIP_SELECT; layers[0].size =3D 4; layers[0].is_virt_csrow =3D true; @@ -511,10 +515,17 @@ int fsl_mc_err_probe(struct platform_device *op) layers[1].is_virt_csrow =3D false; mci =3D edac_mc_alloc(edac_mc_idx, ARRAY_SIZE(layers), layers, sizeof(*pdata)); - if (!mci) { - devres_release_group(&op->dev, fsl_mc_err_probe); + if (!mci) return -ENOMEM; - } + + /* + * Manage mci lifetime via devres so it is freed only after the + * devm-requested IRQ is released, avoiding a use-after-free of mci + * (and its pdata) in the shared interrupt handler during removal. + */ + res =3D devm_add_action_or_reset(&op->dev, fsl_mc_edac_free, mci); + if (res) + return res; =20 pdata =3D mci->pvt_info; pdata->name =3D "fsl_mc_err"; @@ -558,10 +569,8 @@ int fsl_mc_err_probe(struct platform_device *op) =20 if (pdata->flag =3D=3D TYPE_IMX9) { pdata->inject_vbase =3D devm_platform_ioremap_resource_byname(op, "injec= t"); - if (IS_ERR(pdata->inject_vbase)) { - res =3D -ENOMEM; - goto err; - } + if (IS_ERR(pdata->inject_vbase)) + return -ENOMEM; } =20 if (pdata->flag =3D=3D TYPE_IMX9) { @@ -575,8 +584,7 @@ int fsl_mc_err_probe(struct platform_device *op) if ((sdram_ctl & ecc_en_mask) !=3D ecc_en_mask) { /* no ECC */ pr_warn("%s: No ECC DIMMs discovered\n", __func__); - res =3D -ENODEV; - goto err; + return -ENODEV; } =20 edac_dbg(3, "init mci\n"); @@ -639,7 +647,6 @@ int fsl_mc_err_probe(struct platform_device *op) pdata->irq); } =20 - devres_remove_group(&op->dev, fsl_mc_err_probe); edac_dbg(3, "success\n"); pr_info(EDAC_MOD_STR " MC err registered\n"); =20 @@ -652,8 +659,6 @@ int fsl_mc_err_probe(struct platform_device *op) ddr_out32(pdata, FSL_MC_ERR_DISABLE, pdata->orig_ddr_err_disable); ddr_out32(pdata, FSL_MC_ERR_SBE, pdata->orig_ddr_err_sbe); - devres_release_group(&op->dev, fsl_mc_err_probe); - edac_mc_free(mci); return res; } =20 @@ -674,5 +679,4 @@ void fsl_mc_err_remove(struct platform_device *op) =20 =20 edac_mc_del_mc(&op->dev); - edac_mc_free(mci); } --=20 2.55.0