[SCSI] be2iscsi: fix memory leak in error path
authorGeyslan G. Bem <geyslan@gmail.com>
Mon, 18 Nov 2013 19:42:57 +0000 (16:42 -0300)
committerJames Bottomley <JBottomley@Parallels.com>
Thu, 19 Dec 2013 15:39:04 +0000 (07:39 -0800)
There are two memory leaks in cases 'ISCSI_NET_PARAM_VLAN_ID' and
'ISCSI_NET_PARAM_VLAN_PRIORITY' and also a potential junk pointer free if
mgmt_get_if_info() returns error because if_info will be unset and it is stack
allocated.

Signed-off-by: Geyslan G. Bem <geyslan@gmail.com>
Cc: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/be2iscsi/be_iscsi.c

index ffadbee..889066d 100644 (file)
@@ -541,10 +541,8 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
                ip_type = BE2_IPV6;
 
        len = mgmt_get_if_info(phba, ip_type, &if_info);
-       if (len) {
-               kfree(if_info);
+       if (len)
                return len;
-       }
 
        switch (param) {
        case ISCSI_NET_PARAM_IPV4_ADDR:
@@ -569,7 +567,7 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
                break;
        case ISCSI_NET_PARAM_VLAN_ID:
                if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE)
-                       return -EINVAL;
+                       len = -EINVAL;
                else
                        len = sprintf(buf, "%d\n",
                                     (if_info->vlan_priority &
@@ -577,7 +575,7 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
                break;
        case ISCSI_NET_PARAM_VLAN_PRIORITY:
                if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE)
-                       return -EINVAL;
+                       len = -EINVAL;
                else
                        len = sprintf(buf, "%d\n",
                                     ((if_info->vlan_priority >> 13) &