[SCSI] bfa: don't leak mem in bfad_im_bsg_els_ct_request()
authorJesper Juhl <jj@chaosbits.net>
Fri, 27 Jan 2012 23:23:41 +0000 (00:23 +0100)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 19 Feb 2012 14:09:01 +0000 (08:09 -0600)
If 'drv_fcxp = kzalloc(sizeof(struct bfad_fcxp), GFP_KERNEL);' fails
and returns NULL, then we'll leak the memory allocated to 'bsg_fcpt'
when we jump to 'out:' and the variable subsequently goes out of
scope.

Also remove the cast of the kzalloc() return value. kzalloc() returns
a void* which is implicitly converted, so the explicit cast is
pointless.

Signed-off-by: Jesper Juhl <jj@chaosbits.net>
Acked-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/bfa/bfad_bsg.c

index 530de2b1200a20c58b0e88a49c299ed97c2d1126..8005c6c5a080efa3b9e2b2b2b6403a1323cee9e1 100644 (file)
@@ -3047,8 +3047,7 @@ bfad_im_bsg_els_ct_request(struct fc_bsg_job *job)
         * Allocate buffer for bsg_fcpt and do a copy_from_user op for payload
         * buffer of size bsg_data->payload_len
         */
-       bsg_fcpt = (struct bfa_bsg_fcpt_s *)
-                  kzalloc(bsg_data->payload_len, GFP_KERNEL);
+       bsg_fcpt = kzalloc(bsg_data->payload_len, GFP_KERNEL);
        if (!bsg_fcpt)
                goto out;
 
@@ -3060,6 +3059,7 @@ bfad_im_bsg_els_ct_request(struct fc_bsg_job *job)
 
        drv_fcxp = kzalloc(sizeof(struct bfad_fcxp), GFP_KERNEL);
        if (drv_fcxp == NULL) {
+               kfree(bsg_fcpt);
                rc = -ENOMEM;
                goto out;
        }