Skip to content

Commit d6e3ae7

Browse files
dinghaoliumartinkpetersen
authored andcommitted
scsi: fnic: Fix memleak in vnic_dev_init_devcmd2
When ioread32() returns 0xFFFFFFFF, we should execute cleanup functions like other error handling paths before returning. Link: https://lore.kernel.org/r/[email protected] Acked-by: Karan Tilak Kumar <[email protected]> Signed-off-by: Dinghao Liu <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent b2b0f16 commit d6e3ae7

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

drivers/scsi/fnic/vnic_dev.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ static int vnic_dev_init_devcmd2(struct vnic_dev *vdev)
444444
fetch_index = ioread32(&vdev->devcmd2->wq.ctrl->fetch_index);
445445
if (fetch_index == 0xFFFFFFFF) { /* check for hardware gone */
446446
pr_err("error in devcmd2 init");
447-
return -ENODEV;
447+
err = -ENODEV;
448+
goto err_free_wq;
448449
}
449450

450451
/*
@@ -460,7 +461,7 @@ static int vnic_dev_init_devcmd2(struct vnic_dev *vdev)
460461
err = vnic_dev_alloc_desc_ring(vdev, &vdev->devcmd2->results_ring,
461462
DEVCMD2_RING_SIZE, DEVCMD2_DESC_SIZE);
462463
if (err)
463-
goto err_free_wq;
464+
goto err_disable_wq;
464465

465466
vdev->devcmd2->result =
466467
(struct devcmd2_result *) vdev->devcmd2->results_ring.descs;
@@ -481,8 +482,9 @@ static int vnic_dev_init_devcmd2(struct vnic_dev *vdev)
481482

482483
err_free_desc_ring:
483484
vnic_dev_free_desc_ring(vdev, &vdev->devcmd2->results_ring);
484-
err_free_wq:
485+
err_disable_wq:
485486
vnic_wq_disable(&vdev->devcmd2->wq);
487+
err_free_wq:
486488
vnic_wq_free(&vdev->devcmd2->wq);
487489
err_free_devcmd2:
488490
kfree(vdev->devcmd2);

0 commit comments

Comments
 (0)