drivers/edac/ move a kfree() to after last use
Subsystems (3)
Move a kfree() below the last use of the memory
Coverity CID: 13142
Signed-off-by Darren Jenkins <[email protected]>
drivers/edac/amd64_edac.c +0 -0
@@ -2925,10 +2925,10 @@ static void __devexit
amd64_remove_one_instance(struct pci_dev *pdev)
amd64_free_mc_sibling_devices(pvt);
- kfree(pvt);
mci->pvt_info = NULL;
mci_lookup[pvt->mc_node_id] = NULL;
+ kfree(pvt);
/* unregister from EDAC MCE */
amd_report_gart_errors(false);
Quoted 6 lines · Darren Jenkins
Move a
kfree()below the last use of the memoryCoverity CID: 13142
Signed-off-by Darren Jenkins <[email protected]>
Thanks for catching that. Here's a better version that does all the freeing at the end of the function.
--
From: Borislav Petkov <[email protected]>
Date: Mon, 21 Dec 2009 15:15:59 +0100
Subject: [PATCH] amd64_edac: fix driver instance freeing
Fix use-after-free errors by pushing all memory-freeing calls to the end of amd64_remove_one_instance().
Reported-by Darren Jenkins <[email protected]>
Signed-off-by Borislav Petkov <[email protected]>
--- drivers/edac/amd64_edac.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-)
drivers/edac/amd64_edac.c +4 -5
@@ -2929,16 +2929,15 @@ static void __devexit amd64_remove_one_instance(struct pci_dev *pdev)amd64_free_mc_sibling_devices (pvt); -kfree (pvt); - mci->pvt_info =NULL ; - - mci_lookup[pvt->mc_node_id] =NULL ; -/* unregister from EDAC MCE */ amd_report_gart_errors (false);amd_unregister_ecc_decoder (amd64_decode_bus_error);/* Free the EDAC CORE resources */ + mci->pvt_info =NULL ; + mci_lookup[pvt->mc_node_id] =NULL ; + +kfree (pvt);edac_mc_free (mci); }
Signature · 12 lines
1.6.5.4 -- Regards/Gruss, Boris. Operating | Advanced Micro Devices GmbH System | Karl-Hammerschmidt-Str. 34, 85609 Dornach b. München, Germany Research | Geschäftsführer: Andrew Bowd, Thomas M. McCoy, Giuliano Meroni Center | Sitz: Dornach, Gemeinde Aschheim, Landkreis München (OSRC) | Registergericht München, HRB Nr. 43632