lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 010/135] vfio/pci: fix memory leaks in alloc_perm_bits()
    Date
    From: Qian Cai <cai@lca.pw>

    [ Upstream commit 3e63b94b6274324ff2e7d8615df31586de827c4e ]

    vfio_pci_disable() calls vfio_config_free() but forgets to call
    free_perm_bits() resulting in memory leaks,

    unreferenced object 0xc000000c4db2dee0 (size 16):
    comm "qemu-kvm", pid 4305, jiffies 4295020272 (age 3463.780s)
    hex dump (first 16 bytes):
    00 00 ff 00 ff ff ff ff ff ff ff ff ff ff 00 00 ................
    backtrace:
    [<00000000a6a4552d>] alloc_perm_bits+0x58/0xe0 [vfio_pci]
    [<00000000ac990549>] vfio_config_init+0xdf0/0x11b0 [vfio_pci]
    init_pci_cap_msi_perm at drivers/vfio/pci/vfio_pci_config.c:1125
    (inlined by) vfio_msi_cap_len at drivers/vfio/pci/vfio_pci_config.c:1180
    (inlined by) vfio_cap_len at drivers/vfio/pci/vfio_pci_config.c:1241
    (inlined by) vfio_cap_init at drivers/vfio/pci/vfio_pci_config.c:1468
    (inlined by) vfio_config_init at drivers/vfio/pci/vfio_pci_config.c:1707
    [<000000006db873a1>] vfio_pci_open+0x234/0x700 [vfio_pci]
    [<00000000630e1906>] vfio_group_fops_unl_ioctl+0x8e0/0xb84 [vfio]
    [<000000009e34c54f>] ksys_ioctl+0xd8/0x130
    [<000000006577923d>] sys_ioctl+0x28/0x40
    [<000000006d7b1cf2>] system_call_exception+0x114/0x1e0
    [<0000000008ea7dd5>] system_call_common+0xf0/0x278
    unreferenced object 0xc000000c4db2e330 (size 16):
    comm "qemu-kvm", pid 4305, jiffies 4295020272 (age 3463.780s)
    hex dump (first 16 bytes):
    00 ff ff 00 ff ff ff ff ff ff ff ff ff ff 00 00 ................
    backtrace:
    [<000000004c71914f>] alloc_perm_bits+0x44/0xe0 [vfio_pci]
    [<00000000ac990549>] vfio_config_init+0xdf0/0x11b0 [vfio_pci]
    [<000000006db873a1>] vfio_pci_open+0x234/0x700 [vfio_pci]
    [<00000000630e1906>] vfio_group_fops_unl_ioctl+0x8e0/0xb84 [vfio]
    [<000000009e34c54f>] ksys_ioctl+0xd8/0x130
    [<000000006577923d>] sys_ioctl+0x28/0x40
    [<000000006d7b1cf2>] system_call_exception+0x114/0x1e0
    [<0000000008ea7dd5>] system_call_common+0xf0/0x278

    Fixes: 89e1f7d4c66d ("vfio: Add PCI device driver")
    Signed-off-by: Qian Cai <cai@lca.pw>
    [aw: rolled in follow-up patch]
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/vfio/pci/vfio_pci_config.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
    index 98a12be76c9cf..bf65572f47a8f 100644
    --- a/drivers/vfio/pci/vfio_pci_config.c
    +++ b/drivers/vfio/pci/vfio_pci_config.c
    @@ -1644,8 +1644,11 @@ void vfio_config_free(struct vfio_pci_device *vdev)
    vdev->vconfig = NULL;
    kfree(vdev->pci_config_map);
    vdev->pci_config_map = NULL;
    - kfree(vdev->msi_perm);
    - vdev->msi_perm = NULL;
    + if (vdev->msi_perm) {
    + free_perm_bits(vdev->msi_perm);
    + kfree(vdev->msi_perm);
    + vdev->msi_perm = NULL;
    + }
    }

    /*
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 23:11    [W:6.358 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site