Fix double mem region release
Subsystems (2)
cover Fix double mem region release
Two one-liners for the same issue, second bug occurrence is just a copy&pasted mistake from 2011...
Ladislav Michl (2):
devres: Fix double mem region release in devm_ioremap_resource()
PCI: Fix double mem region release in devm_pci_remap_cfg_resource()
drivers/pci/pci.c | 1 - lib/devres.c | 1 - 2 files changed, 2 deletions(-)
Signature · 1 line
2.15.1
PATCH 1/2 devres: Fix double mem region release in devm_ioremap_resource()
devm_release_mem_region() is called explicitely in case devm_ioremap() fails, however the same release function is later called also as devres release of devm_request_mem_region() causing double resource free.
--- lib/devres.c | 1 - 1 file changed, 1 deletion(-)
lib/devres.c +0 -1
@@ -156,7 +156,6 @@ void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res) dest_ptr =devm_ioremap (dev, res->start, size);if (!dest_ptr) {dev_err (dev,"ioremap failed for resource %pR\n" , res); -devm_release_mem_region (dev, res->start, size); dest_ptr =IOMEM_ERR_PTR (-ENOMEM ); }
Signature · 1 line
2.15.1
PATCH 2/2 PCI: Fix double mem region release in devm_pci_remap_cfg_resource()
In reply to Ladislav Michldevm_release_mem_region() is called explicitely in case devm_pci_remap_cfgspace() fails, however the same release function is later called also as devres release of devm_request_mem_region() causing double resource free.
--- drivers/pci/pci.c | 1 - 1 file changed, 1 deletion(-)
drivers/pci/pci.c +0 -1
@@ -3607,7 +3607,6 @@ void __iomem *devm_pci_remap_cfg_resource(struct device *dev, dest_ptr =devm_pci_remap_cfgspace (dev, res->start, size);if (!dest_ptr) {dev_err (dev,"ioremap failed for resource %pR\n" , res); -devm_release_mem_region (dev, res->start, size); dest_ptr =IOMEM_ERR_PTR (-ENOMEM ); }
Signature · 1 line
2.15.1
Quoted 6 lines · Ladislav Michl
Two one-liners for the same issue, second bug occurrence is just a copy&pasted mistake from 2011...
Ladislav Michl (2):
devres: Fix double mem region release indevm_ioremap_resource()
PCI: Fix double mem region release indevm_pci_remap_cfg_resource()
Hmm, that is really shame :-/ My test setup triggered "Trying to free nonexistent resource" warning, but dissasembly of lib/devres.o shows no call to devres_destroy, which seems that WARN_ON in __devm_release_region() is optimized out. Strange. So far sorry for the noise, I'll try figure out what broke after weekend.
Quoted 7 lines
drivers/pci/pci.c | 1 - lib/devres.c | 1 - 2 files changed, 2 deletions(-)Signature · 1 line
2.15.1