devres: Fix possible use after free
Subsystems (4)
devres uses the pointer value as key after it's freed, which is safe but triggers spurious use-after-free warnings on some static analysis tools. Rearrange code to avoid such warnings.
Signed-off-by Maxin B. John <[email protected]>
Reviewed-by Rolf Eike Beer <[email protected]>
Acked-by Tejun Heo <[email protected]>
---
kernel/irq/devres.c +1 -1
@@ -87,8 +87,8 @@ void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id) {struct irq_devres match_data = { irq, dev_id }; -free_irq (irq, dev_id);WARN_ON (devres_destroy (dev, devm_irq_release, devm_irq_match, &match_data)); +free_irq (irq, dev_id); }EXPORT_SYMBOL (devm_free_irq);
lib/devres.c +1 -1
@@ -79,9 +79,9 @@ EXPORT_SYMBOL(devm_ioremap_nocache);*/ void devm_iounmap (struct device *dev,void __iomem *addr) { -iounmap (addr);WARN_ON (devres_destroy (dev, devm_ioremap_release, devm_ioremap_match, (void *)addr)); +iounmap (addr); }EXPORT_SYMBOL (devm_iounmap);
mm/dmapool.c +1 -1
@@ -500,7 +500,7 @@ void dmam_pool_destroy(struct dma_pool *pool) {struct device *dev = pool->dev; -dma_pool_destroy (pool);WARN_ON (devres_destroy (dev, dmam_pool_release, dmam_pool_match, pool)); +dma_pool_destroy (pool); }EXPORT_SYMBOL (dmam_pool_destroy);