This patch fix memory leakage in cases 'ISCSI_NET_PARAM_VLAN_ID' and 'ISCSI_NET_PARAM_VLAN_PRIORITY' and refactors code 'going out' when necessary. Signed-off-by: Geyslan G. Bem <geyslan@xxxxxxxxx> --- drivers/scsi/be2iscsi/be_iscsi.c | 41 +++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index ffadbee..7e909dc 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c @@ -535,51 +535,53 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba, char *buf) { struct be_cmd_get_if_info_resp *if_info; - int len, ip_type = BE2_IPV4; + int ret, ip_type = BE2_IPV4; if (iface->iface_type == ISCSI_IFACE_TYPE_IPV6) ip_type = BE2_IPV6; - len = mgmt_get_if_info(phba, ip_type, &if_info); - if (len) { - kfree(if_info); - return len; - } + ret = mgmt_get_if_info(phba, ip_type, &if_info); + if (ret) + goto out; switch (param) { case ISCSI_NET_PARAM_IPV4_ADDR: - len = sprintf(buf, "%pI4\n", if_info->ip_addr.addr); + ret = sprintf(buf, "%pI4\n", if_info->ip_addr.addr); break; case ISCSI_NET_PARAM_IPV6_ADDR: - len = sprintf(buf, "%pI6\n", if_info->ip_addr.addr); + ret = sprintf(buf, "%pI6\n", if_info->ip_addr.addr); break; case ISCSI_NET_PARAM_IPV4_BOOTPROTO: if (!if_info->dhcp_state) - len = sprintf(buf, "static\n"); + ret = sprintf(buf, "static\n"); else - len = sprintf(buf, "dhcp\n"); + ret = sprintf(buf, "dhcp\n"); break; case ISCSI_NET_PARAM_IPV4_SUBNET: - len = sprintf(buf, "%pI4\n", if_info->ip_addr.subnet_mask); + ret = sprintf(buf, "%pI4\n", if_info->ip_addr.subnet_mask); break; case ISCSI_NET_PARAM_VLAN_ENABLED: - len = sprintf(buf, "%s\n", + ret = sprintf(buf, "%s\n", (if_info->vlan_priority == BEISCSI_VLAN_DISABLE) ? "Disabled\n" : "Enabled\n"); break; case ISCSI_NET_PARAM_VLAN_ID: - if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE) - return -EINVAL; + if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE) { + ret = -EINVAL; + goto out; + } else - len = sprintf(buf, "%d\n", + ret = sprintf(buf, "%d\n", (if_info->vlan_priority & ISCSI_MAX_VLAN_ID)); break; case ISCSI_NET_PARAM_VLAN_PRIORITY: - if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE) - return -EINVAL; + if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE) { + ret = -EINVAL; + goto out; + } else - len = sprintf(buf, "%d\n", + ret = sprintf(buf, "%d\n", ((if_info->vlan_priority >> 13) & ISCSI_MAX_VLAN_PRIORITY)); break; @@ -587,8 +589,9 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba, WARN_ON(1); } +out: kfree(if_info); - return len; + return ret; } int be2iscsi_iface_get_param(struct iscsi_iface *iface, -- 1.8.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html