Skip to content

Commit

Permalink
devres: fix possible use after free
Browse files Browse the repository at this point in the history
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]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
maxinbjohn authored and torvalds committed Jul 26, 2011
1 parent 5190f0c commit ae891a1
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion kernel/irq/devres.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
2 changes: 1 addition & 1 deletion lib/devres.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
2 changes: 1 addition & 1 deletion mm/dmapool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

0 comments on commit ae891a1

Please sign in to comment.