]> git.hungrycats.org Git - linux/commitdiff
[PATCH] plug leaks in aic79xx
authorDave Jones <davej@redhat.com>
Fri, 10 Sep 2004 09:39:48 +0000 (05:39 -0400)
committerDave Jones <davej@delerium.codemonkey.org.uk>
Fri, 10 Sep 2004 09:39:48 +0000 (05:39 -0400)
Spotted with the source checker from Coverity.com.

Signed-off-by: Dave Jones <davej@redhat.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/aic7xxx/aic79xx_osm.c

index c9f3a52f1a33e8f14f70528bc82f3f14e8a0eeb5..9ce30fe49bbdfd8f6ff8a10ad1c590e05b2e2bc8 100644 (file)
@@ -1560,6 +1560,8 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
 
        ahd = *(struct ahd_softc **)cmd->device->host->hostdata;
        recovery_cmd = malloc(sizeof(struct scsi_cmnd), M_DEVBUF, M_WAITOK);
+       if (!recovery_cmd)
+               return (FAILED);
        memset(recovery_cmd, 0, sizeof(struct scsi_cmnd));
        recovery_cmd->device = cmd->device;
        recovery_cmd->scsi_done = ahd_linux_dev_reset_complete;
@@ -1575,10 +1577,12 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
                                   cmd->device->lun, /*alloc*/FALSE);
        if (dev == NULL) {
                ahd_midlayer_entrypoint_unlock(ahd, &s);
+               kfree(recovery_cmd);
                return (FAILED);
        }
        if ((scb = ahd_get_scb(ahd, AHD_NEVER_COL_IDX)) == NULL) {
                ahd_midlayer_entrypoint_unlock(ahd, &s);
+               kfree(recovery_cmd);
                return (FAILED);
        }
        tinfo = ahd_fetch_transinfo(ahd, 'A', ahd->our_id,
@@ -1773,6 +1777,7 @@ ahd_dmamem_alloc(struct ahd_softc *ahd, bus_dma_tag_t dmat, void** vaddr,
        if (ahd->dev_softc != NULL)
                if (ahd_pci_set_dma_mask(ahd->dev_softc, 0xFFFFFFFF)) {
                        printk(KERN_WARNING "aic79xx: No suitable DMA available.\n");
+                       kfree(map);
                        return (ENODEV);
                }
        *vaddr = pci_alloc_consistent(ahd->dev_softc,
@@ -1781,6 +1786,7 @@ ahd_dmamem_alloc(struct ahd_softc *ahd, bus_dma_tag_t dmat, void** vaddr,
                if (ahd_pci_set_dma_mask(ahd->dev_softc,
                                     ahd->platform_data->hw_dma_mask)) {
                        printk(KERN_WARNING "aic79xx: No suitable DMA available.\n");
+                       kfree(map);
                        return (ENODEV);
                }
 #else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) */