[SCSI] be2iscsi: fix memory leak in error path

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>
This commit is contained in:
Geyslan G. Bem 2013-11-18 16:42:57 -03:00 коммит произвёл James Bottomley
Родитель 6634ff7ca2
Коммит 0e7c60cb8c
1 изменённых файлов: 3 добавлений и 5 удалений

Просмотреть файл

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