projects
/
platform
/
kernel
/
linux-rpi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
6a8b55e
)
iommu: Fix the memory leak in dev_iommu_free()
author
Kevin Hao
<haokexin@gmail.com>
Thu, 2 Apr 2020 14:37:49 +0000
(22:37 +0800)
committer
Joerg Roedel
<jroedel@suse.de>
Wed, 29 Apr 2020 11:55:40 +0000
(13:55 +0200)
In iommu_probe_device(), we would invoke dev_iommu_free() to free the
dev->iommu after the ->add_device() returns failure. But after commit
72acd9df18f1
("iommu: Move iommu_fwspec to struct dev_iommu"), we also
need to free the iommu_fwspec before the dev->iommu is freed. This fixes
the following memory leak reported by kmemleak:
unreferenced object 0xffff000bc836c700 (size 128):
comm "swapper/0", pid 1, jiffies
4294896304
(age 782.120s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 d8 cd 9b ff 0b 00 ff ff ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<
00000000df34077b
>] kmem_cache_alloc_trace+0x244/0x4b0
[<
000000000e560ac0
>] iommu_fwspec_init+0x7c/0xb0
[<
0000000075eda275
>] of_iommu_xlate+0x80/0xe8
[<
00000000728d6bf9
>] of_pci_iommu_init+0xb0/0xb8
[<
00000000d001fe6f
>] pci_for_each_dma_alias+0x48/0x190
[<
000000006db6bbce
>] of_iommu_configure+0x1ac/0x1d0
[<
00000000634745f8
>] of_dma_configure+0xdc/0x220
[<
000000002cbc8ba0
>] pci_dma_configure+0x50/0x78
[<
00000000cdf6e193
>] really_probe+0x8c/0x340
[<
00000000fddddc46
>] driver_probe_device+0x60/0xf8
[<
0000000061bcdb51
>] __device_attach_driver+0x8c/0xd0
[<
000000009b9ff58e
>] bus_for_each_drv+0x80/0xd0
[<
000000004b9c8aa3
>] __device_attach+0xec/0x148
[<
00000000a5c13bf3
>] device_attach+0x1c/0x28
[<
000000005071e151
>] pci_bus_add_device+0x58/0xd0
[<
000000002d4f87d1
>] pci_bus_add_devices+0x40/0x90
Fixes:
72acd9df18f1
("iommu: Move iommu_fwspec to struct dev_iommu")
Signed-off-by: Kevin Hao <haokexin@gmail.com>
Link:
https://lore.kernel.org/r/20200402143749.40500-1-haokexin@gmail.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/iommu.c
patch
|
blob
|
history
diff --git
a/drivers/iommu/iommu.c
b/drivers/iommu/iommu.c
index
2b47141
..
54757c4
100644
(file)
--- a/
drivers/iommu/iommu.c
+++ b/
drivers/iommu/iommu.c
@@
-170,6
+170,7
@@
static struct dev_iommu *dev_iommu_get(struct device *dev)
static void dev_iommu_free(struct device *dev)
{
+ iommu_fwspec_free(dev);
kfree(dev->iommu);
dev->iommu = NULL;
}