lkml.org 
[lkml]   [2021]   [Aug]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 84/98] ipack: tpci200: fix memory leak in the tpci200_register
    Date
    From: Dongliang Mu <mudongliangabcd@gmail.com>

    [ Upstream commit 50f05bd114a46a74726e432bf81079d3f13a55b7 ]

    The error handling code in tpci200_register does not free interface_regs
    allocated by ioremap and the current version of error handling code is
    problematic.

    Fix this by refactoring the error handling code and free interface_regs
    when necessary.

    Fixes: 43986798fd50 ("ipack: add error handling for ioremap_nocache")
    Cc: stable@vger.kernel.org
    Reported-by: Dongliang Mu <mudongliangabcd@gmail.com>
    Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
    Link: https://lore.kernel.org/r/20210810100323.3938492-2-mudongliangabcd@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/ipack/carriers/tpci200.c | 24 ++++++++++++++----------
    1 file changed, 14 insertions(+), 10 deletions(-)

    diff --git a/drivers/ipack/carriers/tpci200.c b/drivers/ipack/carriers/tpci200.c
    index 33a1b17a2628..c1098f40e03f 100644
    --- a/drivers/ipack/carriers/tpci200.c
    +++ b/drivers/ipack/carriers/tpci200.c
    @@ -256,7 +256,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
    "(bn 0x%X, sn 0x%X) failed to allocate PCI resource for BAR 2 !",
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    - goto out_disable_pci;
    + goto err_disable_device;
    }

    /* Request IO ID INT space (Bar 3) */
    @@ -268,7 +268,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
    "(bn 0x%X, sn 0x%X) failed to allocate PCI resource for BAR 3 !",
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    - goto out_release_ip_space;
    + goto err_ip_interface_bar;
    }

    /* Request MEM8 space (Bar 5) */
    @@ -279,7 +279,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
    "(bn 0x%X, sn 0x%X) failed to allocate PCI resource for BAR 5!",
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    - goto out_release_ioid_int_space;
    + goto err_io_id_int_spaces_bar;
    }

    /* Request MEM16 space (Bar 4) */
    @@ -290,7 +290,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
    "(bn 0x%X, sn 0x%X) failed to allocate PCI resource for BAR 4!",
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    - goto out_release_mem8_space;
    + goto err_mem8_space_bar;
    }

    /* Map internal tpci200 driver user space */
    @@ -304,7 +304,7 @@ static int tpci200_register(struct tpci200_board *tpci200)
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    res = -ENOMEM;
    - goto out_release_mem8_space;
    + goto err_mem16_space_bar;
    }

    /* Initialize lock that protects interface_regs */
    @@ -343,18 +343,22 @@ static int tpci200_register(struct tpci200_board *tpci200)
    "(bn 0x%X, sn 0x%X) unable to register IRQ !",
    tpci200->info->pdev->bus->number,
    tpci200->info->pdev->devfn);
    - goto out_release_ioid_int_space;
    + goto err_interface_regs;
    }

    return 0;

    -out_release_mem8_space:
    +err_interface_regs:
    + pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs);
    +err_mem16_space_bar:
    + pci_release_region(tpci200->info->pdev, TPCI200_MEM16_SPACE_BAR);
    +err_mem8_space_bar:
    pci_release_region(tpci200->info->pdev, TPCI200_MEM8_SPACE_BAR);
    -out_release_ioid_int_space:
    +err_io_id_int_spaces_bar:
    pci_release_region(tpci200->info->pdev, TPCI200_IO_ID_INT_SPACES_BAR);
    -out_release_ip_space:
    +err_ip_interface_bar:
    pci_release_region(tpci200->info->pdev, TPCI200_IP_INTERFACE_BAR);
    -out_disable_pci:
    +err_disable_device:
    pci_disable_device(tpci200->info->pdev);
    return res;
    }
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-08-24 19:14    [W:3.042 / U:0.788 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site