]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
EDAC/i3200: Fix a resource leak in i3200_probe1()
authorHaoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Tue, 23 Dec 2025 12:32:02 +0000 (20:32 +0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Sun, 4 Jan 2026 07:31:44 +0000 (08:31 +0100)
If edac_mc_alloc() fails, also unmap the window.

  [ bp: Use separate labels, turning it into the classic unwind pattern. ]

Fixes: dd8ef1db87a4 ("edac: i3200 memory controller driver")
Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20251223123202.1492038-1-lihaoxiang@isrc.iscas.ac.cn
drivers/edac/i3200_edac.c

index afccdebf5ac1ebe7cfd7dafe8fdc0bb3173c6b9c..6cade6d7ceff625b05bddee7ada421187f3d7dfb 100644 (file)
@@ -358,10 +358,11 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)
        layers[1].type = EDAC_MC_LAYER_CHANNEL;
        layers[1].size = nr_channels;
        layers[1].is_virt_csrow = false;
-       mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers,
-                           sizeof(struct i3200_priv));
+
+       rc = -ENOMEM;
+       mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, sizeof(struct i3200_priv));
        if (!mci)
-               return -ENOMEM;
+               goto unmap;
 
        edac_dbg(3, "MC: init mci\n");
 
@@ -421,9 +422,9 @@ static int i3200_probe1(struct pci_dev *pdev, int dev_idx)
        return 0;
 
 fail:
+       edac_mc_free(mci);
+unmap:
        iounmap(window);
-       if (mci)
-               edac_mc_free(mci);
 
        return rc;
 }