Skip to contentSkip to conversation

drivers/edac/ move a kfree() to after last use

PATCH Darren Jenkins 2 participants 2 messages Dec 21, 2009

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Move a kfree() below the last use of the memory

Coverity CID: 13142

drivers/edac/amd64_edac.c +0 -0
index df5b684..15b8b3c 100644
@@ -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);

#1 lore raw
Quoted 6 lines · Darren Jenkins

Move a kfree() below the last use of the memory

Coverity CID: 13142

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().

---
 drivers/edac/amd64_edac.c |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)
drivers/edac/amd64_edac.c +4 -5
index 784cc5a..fb0d36b 100644
@@ -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