summaryrefslogtreecommitdiff
path: root/drivers/edac
diff options
context:
space:
mode:
authorOrange Kao <orange@aiven.io>2024-11-04 15:40:52 +0300
committerTony Luck <tony.luck@intel.com>2024-11-04 23:09:45 +0300
commitfefaae90398d38a1100ccd73b46ab55ff4610fba (patch)
treee6914ab42dcd6a487a544b6f74ff44c6067e43a7 /drivers/edac
parentf12c946ee778d173966fdd2e69ba57a768987bcb (diff)
downloadlinux-fefaae90398d38a1100ccd73b46ab55ff4610fba.tar.xz
EDAC/igen6: Avoid segmentation fault on module unload
The segmentation fault happens because: During modprobe: 1. In igen6_probe(), igen6_pvt will be allocated with kzalloc() 2. In igen6_register_mci(), mci->pvt_info will point to &igen6_pvt->imc[mc] During rmmod: 1. In mci_release() in edac_mc.c, it will kfree(mci->pvt_info) 2. In igen6_remove(), it will kfree(igen6_pvt); Fix this issue by setting mci->pvt_info to NULL to avoid the double kfree. Fixes: 10590a9d4f23 ("EDAC/igen6: Add EDAC driver for Intel client SoCs using IBECC") Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219360 Signed-off-by: Orange Kao <orange@aiven.io> Signed-off-by: Tony Luck <tony.luck@intel.com> Link: https://lore.kernel.org/r/20241104124237.124109-2-orange@aiven.io
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/igen6_edac.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/edac/igen6_edac.c b/drivers/edac/igen6_edac.c
index 189a2fc29e74..07dacf8c10be 100644
--- a/drivers/edac/igen6_edac.c
+++ b/drivers/edac/igen6_edac.c
@@ -1245,6 +1245,7 @@ static int igen6_register_mci(int mc, u64 mchbar, struct pci_dev *pdev)
imc->mci = mci;
return 0;
fail3:
+ mci->pvt_info = NULL;
kfree(mci->ctl_name);
fail2:
edac_mc_free(mci);
@@ -1269,6 +1270,7 @@ static void igen6_unregister_mcis(void)
edac_mc_del_mc(mci->pdev);
kfree(mci->ctl_name);
+ mci->pvt_info = NULL;
edac_mc_free(mci);
iounmap(imc->window);
}