• Kevin Hao's avatar
    iommu: Fix the memory leak in dev_iommu_free() · 5375e874
    Kevin Hao authored
    In iommu_probe_device(), we would invoke dev_iommu_free() to free the
    dev->iommu after the ->add_device() returns failure. But after commit
    72acd9df ("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: 72acd9df ("iommu: Move iommu_fwspec to struct dev_iommu")
    Signed-off-by: default avatarKevin Hao <haokexin@gmail.com>
    Link: https://lore.kernel.org/r/20200402143749.40500-1-haokexin@gmail.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    5375e874
iommu.c 65.8 KB