Re: [PATCH 4/4] scsi: pm80xx: fix memory leak during rmmod

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 23, 2021 at 9:28 AM Ajish Koshy <Ajish.Koshy@xxxxxxxxxxxxx> wrote:
>
> Driver fails to release memory allocated. This will lead
> to memory leak during driver removal.
>
> Signed-off-by: Ajish Koshy <Ajish.Koshy@xxxxxxxxxxxxx>
> Signed-off-by: Viswas G <Viswas.G@xxxxxxxxxxxxx>
looks ok.
Acked-by: Jack Wang <jinpu.wang@xxxxxxxxx>
> ---
>  drivers/scsi/pm8001/pm8001_init.c | 11 +++++++++++
>  drivers/scsi/pm8001/pm8001_sas.h  |  1 +
>  2 files changed, 12 insertions(+)
>
> diff --git a/drivers/scsi/pm8001/pm8001_init.c b/drivers/scsi/pm8001/pm8001_init.c
> index 613455a3e686..7082fecf7ce8 100644
> --- a/drivers/scsi/pm8001/pm8001_init.c
> +++ b/drivers/scsi/pm8001/pm8001_init.c
> @@ -1199,6 +1199,7 @@ pm8001_init_ccb_tag(struct pm8001_hba_info *pm8001_ha, struct Scsi_Host *shost,
>                 goto err_out;
>
>         /* Memory region for ccb_info*/
> +       pm8001_ha->ccb_count = ccb_count;
>         pm8001_ha->ccb_info =
>                 kcalloc(ccb_count, sizeof(struct pm8001_ccb_info), GFP_KERNEL);
>         if (!pm8001_ha->ccb_info) {
> @@ -1260,6 +1261,16 @@ static void pm8001_pci_remove(struct pci_dev *pdev)
>                         tasklet_kill(&pm8001_ha->tasklet[j]);
>  #endif
>         scsi_host_put(pm8001_ha->shost);
> +
> +       for (i = 0; i < pm8001_ha->ccb_count; i++) {
> +               dma_free_coherent(&pm8001_ha->pdev->dev,
> +                       sizeof(struct pm8001_prd) * PM8001_MAX_DMA_SG,
> +                       pm8001_ha->ccb_info[i].buf_prd,
> +                       pm8001_ha->ccb_info[i].ccb_dma_handle);
> +       }
> +       kfree(pm8001_ha->ccb_info);
> +       kfree(pm8001_ha->devices);
> +
>         pm8001_free(pm8001_ha);
>         kfree(sha->sas_phy);
>         kfree(sha->sas_port);
> diff --git a/drivers/scsi/pm8001/pm8001_sas.h b/drivers/scsi/pm8001/pm8001_sas.h
> index 3274d88a9ccc..7e999768bfd2 100644
> --- a/drivers/scsi/pm8001/pm8001_sas.h
> +++ b/drivers/scsi/pm8001/pm8001_sas.h
> @@ -518,6 +518,7 @@ struct pm8001_hba_info {
>         u32                     iomb_size; /* SPC and SPCV IOMB size */
>         struct pm8001_device    *devices;
>         struct pm8001_ccb_info  *ccb_info;
> +       u32                     ccb_count;
>  #ifdef PM8001_USE_MSIX
>         int                     number_of_intr;/*will be used in remove()*/
>         char                    intr_drvname[PM8001_MAX_MSIX_VEC]
> --
> 2.27.0
>



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux