* [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
@ 2014-06-27 12:55 Maurizio Lombardi
2014-06-27 16:32 ` Tomas Henzl
0 siblings, 1 reply; 6+ messages in thread
From: Maurizio Lombardi @ 2014-06-27 12:55 UTC (permalink / raw)
To: jayamohan.kallickal; +Cc: linux-scsi, michaelc, hch, JBottomley
The if_info pointer is not released by the mgmt_set_ip() function
Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
---
drivers/scsi/be2iscsi/be_mgmt.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
index 07934b0..a3e5648 100644
--- a/drivers/scsi/be2iscsi/be_mgmt.c
+++ b/drivers/scsi/be2iscsi/be_mgmt.c
@@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
if (if_info->dhcp_state) {
beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
"BG_%d : DHCP Already Enabled\n");
- return 0;
+ goto exit;
}
/* The ip_param->len is 1 in DHCP case. Setting
proper IP len as this it is used while
@@ -1033,7 +1033,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
sizeof(*reldhcp));
if (rc)
- return rc;
+ goto exit;
reldhcp = nonemb_cmd.va;
reldhcp->interface_hndl = phba->interface_handle;
@@ -1044,7 +1044,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
beiscsi_log(phba, KERN_WARNING,
BEISCSI_LOG_CONFIG,
"BG_%d : Failed to Delete existing dhcp\n");
- return rc;
+ goto exit;
}
}
}
@@ -1054,7 +1054,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
rc = mgmt_static_ip_modify(phba, if_info, ip_param, NULL,
IP_ACTION_DEL);
if (rc)
- return rc;
+ goto exit;
}
/* Delete the Gateway settings if mode change is to DHCP */
@@ -1064,7 +1064,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
if (rc) {
beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
"BG_%d : Failed to Get Gateway Addr\n");
- return rc;
+ goto exit;
}
if (gtway_addr_set.ip_addr.addr[0]) {
@@ -1076,7 +1076,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
beiscsi_log(phba, KERN_WARNING,
BEISCSI_LOG_CONFIG,
"BG_%d : Failed to clear Gateway Addr Set\n");
- return rc;
+ goto exit;
}
}
}
@@ -1087,7 +1087,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR,
sizeof(*dhcpreq));
if (rc)
- return rc;
+ goto exit;
dhcpreq = nonemb_cmd.va;
dhcpreq->flags = BLOCKING;
@@ -1095,12 +1095,14 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
dhcpreq->interface_hndl = phba->interface_handle;
dhcpreq->ip_type = BE2_DHCP_V4;
- return mgmt_exec_nonemb_cmd(phba, &nonemb_cmd, NULL, 0);
+ rc = mgmt_exec_nonemb_cmd(phba, &nonemb_cmd, NULL, 0);
} else {
- return mgmt_static_ip_modify(phba, if_info, ip_param,
+ rc = mgmt_static_ip_modify(phba, if_info, ip_param,
subnet_param, IP_ACTION_ADD);
}
+exit:
+ kfree(if_info);
return rc;
}
--
Maurizio Lombardi
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
2014-06-27 12:55 [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip() Maurizio Lombardi
@ 2014-06-27 16:32 ` Tomas Henzl
2014-06-27 19:38 ` Maurizio Lombardi
0 siblings, 1 reply; 6+ messages in thread
From: Tomas Henzl @ 2014-06-27 16:32 UTC (permalink / raw)
To: Maurizio Lombardi, jayamohan.kallickal
Cc: linux-scsi, michaelc, hch, JBottomley
On 06/27/2014 02:55 PM, Maurizio Lombardi wrote:
> The if_info pointer is not released by the mgmt_set_ip() function
>
> Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
> ---
> drivers/scsi/be2iscsi/be_mgmt.c | 20 +++++++++++---------
> 1 file changed, 11 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
> index 07934b0..a3e5648 100644
> --- a/drivers/scsi/be2iscsi/be_mgmt.c
> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
> @@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> if (if_info->dhcp_state) {
> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
> "BG_%d : DHCP Already Enabled\n");
> - return 0;
> + goto exit;
rc should be initialised - so this needs to be added to your patch
Cheers, Tomas
@@ -955,7 +955,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
struct be_dma_mem nonemb_cmd;
uint8_t *gtway_addr;
uint32_t ip_type;
- int rc;
+ int rc = 0;
if (mgmt_get_all_if_id(phba))
return -EIO;
> }
> /* The ip_param->len is 1 in DHCP case. Setting
> proper IP len as this it is used while
> @@ -1033,7 +1033,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> sizeof(*reldhcp));
>
> if (rc)
> - return rc;
> + goto exit;
>
> reldhcp = nonemb_cmd.va;
> reldhcp->interface_hndl = phba->interface_handle;
> @@ -1044,7 +1044,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> beiscsi_log(phba, KERN_WARNING,
> BEISCSI_LOG_CONFIG,
> "BG_%d : Failed to Delete existing dhcp\n");
> - return rc;
> + goto exit;
> }
> }
> }
> @@ -1054,7 +1054,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> rc = mgmt_static_ip_modify(phba, if_info, ip_param, NULL,
> IP_ACTION_DEL);
> if (rc)
> - return rc;
> + goto exit;
> }
>
> /* Delete the Gateway settings if mode change is to DHCP */
> @@ -1064,7 +1064,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> if (rc) {
> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
> "BG_%d : Failed to Get Gateway Addr\n");
> - return rc;
> + goto exit;
> }
>
> if (gtway_addr_set.ip_addr.addr[0]) {
> @@ -1076,7 +1076,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> beiscsi_log(phba, KERN_WARNING,
> BEISCSI_LOG_CONFIG,
> "BG_%d : Failed to clear Gateway Addr Set\n");
> - return rc;
> + goto exit;
> }
> }
> }
> @@ -1087,7 +1087,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> OPCODE_COMMON_ISCSI_NTWK_CONFIG_STATELESS_IP_ADDR,
> sizeof(*dhcpreq));
> if (rc)
> - return rc;
> + goto exit;
>
> dhcpreq = nonemb_cmd.va;
> dhcpreq->flags = BLOCKING;
> @@ -1095,12 +1095,14 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> dhcpreq->interface_hndl = phba->interface_handle;
> dhcpreq->ip_type = BE2_DHCP_V4;
>
> - return mgmt_exec_nonemb_cmd(phba, &nonemb_cmd, NULL, 0);
> + rc = mgmt_exec_nonemb_cmd(phba, &nonemb_cmd, NULL, 0);
> } else {
> - return mgmt_static_ip_modify(phba, if_info, ip_param,
> + rc = mgmt_static_ip_modify(phba, if_info, ip_param,
> subnet_param, IP_ACTION_ADD);
> }
>
> +exit:
> + kfree(if_info);
> return rc;
> }
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
2014-06-27 16:32 ` Tomas Henzl
@ 2014-06-27 19:38 ` Maurizio Lombardi
2014-06-29 18:28 ` Tomas Henzl
0 siblings, 1 reply; 6+ messages in thread
From: Maurizio Lombardi @ 2014-06-27 19:38 UTC (permalink / raw)
To: Tomas Henzl, jayamohan.kallickal; +Cc: linux-scsi, michaelc, hch, JBottomley
>> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
>> index 07934b0..a3e5648 100644
>> --- a/drivers/scsi/be2iscsi/be_mgmt.c
>> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
>> @@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
>> if (if_info->dhcp_state) {
>> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
>> "BG_%d : DHCP Already Enabled\n");
>> - return 0;
>> + goto exit;
>
> rc should be initialised - so this needs to be added to your patch
It is initialized at the beginning of the function, and it must contain zero when the "goto exit" is executed.
int mgmt_set_ip(struct beiscsi_hba *phba,
struct iscsi_iface_param_info *ip_param,
struct iscsi_iface_param_info *subnet_param,
uint32_t boot_proto)
{
struct be_cmd_get_def_gateway_resp gtway_addr_set;
struct be_cmd_get_if_info_resp *if_info;
struct be_cmd_set_dhcp_req *dhcpreq;
struct be_cmd_rel_dhcp_req *reldhcp;
struct be_dma_mem nonemb_cmd;
uint8_t *gtway_addr;
uint32_t ip_type;
int rc;
if (mgmt_get_all_if_id(phba))
return -EIO;
ip_type = (ip_param->param == ISCSI_NET_PARAM_IPV6_ADDR) ?
BE2_IPV6 : BE2_IPV4 ;
rc = mgmt_get_if_info(phba, ip_type, &if_info); <-------------- here
if (rc)
return rc;
if (boot_proto == ISCSI_BOOTPROTO_DHCP) {
if (if_info->dhcp_state) {
beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
"BG_%d : DHCP Already Enabled\n");
goto exit;
}
Regards,
Maurizio Lombardi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
2014-06-27 19:38 ` Maurizio Lombardi
@ 2014-06-29 18:28 ` Tomas Henzl
2014-07-01 18:53 ` Christoph Hellwig
0 siblings, 1 reply; 6+ messages in thread
From: Tomas Henzl @ 2014-06-29 18:28 UTC (permalink / raw)
To: Maurizio Lombardi, jayamohan.kallickal
Cc: linux-scsi, michaelc, hch, JBottomley
On 06/27/2014 09:38 PM, Maurizio Lombardi wrote:
>
>>> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
>>> index 07934b0..a3e5648 100644
>>> --- a/drivers/scsi/be2iscsi/be_mgmt.c
>>> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
>>> @@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
>>> if (if_info->dhcp_state) {
>>> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
>>> "BG_%d : DHCP Already Enabled\n");
>>> - return 0;
>>> + goto exit;
>> rc should be initialised - so this needs to be added to your patch
> It is initialized at the beginning of the function, and it must contain zero when the "goto exit" is executed.
Correct, I haven't noticed the initialisation, sorry for the confusion.
--tm
>
> int mgmt_set_ip(struct beiscsi_hba *phba,
> struct iscsi_iface_param_info *ip_param,
> struct iscsi_iface_param_info *subnet_param,
> uint32_t boot_proto)
> {
> struct be_cmd_get_def_gateway_resp gtway_addr_set;
> struct be_cmd_get_if_info_resp *if_info;
> struct be_cmd_set_dhcp_req *dhcpreq;
> struct be_cmd_rel_dhcp_req *reldhcp;
> struct be_dma_mem nonemb_cmd;
> uint8_t *gtway_addr;
> uint32_t ip_type;
> int rc;
>
> if (mgmt_get_all_if_id(phba))
> return -EIO;
>
> ip_type = (ip_param->param == ISCSI_NET_PARAM_IPV6_ADDR) ?
> BE2_IPV6 : BE2_IPV4 ;
>
> rc = mgmt_get_if_info(phba, ip_type, &if_info); <-------------- here
> if (rc)
> return rc;
>
> if (boot_proto == ISCSI_BOOTPROTO_DHCP) {
> if (if_info->dhcp_state) {
> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
> "BG_%d : DHCP Already Enabled\n");
> goto exit;
> }
>
> Regards,
> Maurizio Lombardi
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
2014-06-29 18:28 ` Tomas Henzl
@ 2014-07-01 18:53 ` Christoph Hellwig
2014-07-07 11:29 ` Tomas Henzl
0 siblings, 1 reply; 6+ messages in thread
From: Christoph Hellwig @ 2014-07-01 18:53 UTC (permalink / raw)
To: Tomas Henzl
Cc: Maurizio Lombardi, jayamohan.kallickal, linux-scsi, michaelc,
hch, JBottomley
On Sun, Jun 29, 2014 at 08:28:34PM +0200, Tomas Henzl wrote:
> On 06/27/2014 09:38 PM, Maurizio Lombardi wrote:
> >
> >>> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
> >>> index 07934b0..a3e5648 100644
> >>> --- a/drivers/scsi/be2iscsi/be_mgmt.c
> >>> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
> >>> @@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
> >>> if (if_info->dhcp_state) {
> >>> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
> >>> "BG_%d : DHCP Already Enabled\n");
> >>> - return 0;
> >>> + goto exit;
> >> rc should be initialised - so this needs to be added to your patch
> > It is initialized at the beginning of the function, and it must contain zero when the "goto exit" is executed.
>
> Correct, I haven't noticed the initialisation, sorry for the confusion.
Is this a formal review from you?
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip()
2014-07-01 18:53 ` Christoph Hellwig
@ 2014-07-07 11:29 ` Tomas Henzl
0 siblings, 0 replies; 6+ messages in thread
From: Tomas Henzl @ 2014-07-07 11:29 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Maurizio Lombardi, jayamohan.kallickal, linux-scsi, michaelc, JBottomley
On 07/01/2014 08:53 PM, Christoph Hellwig wrote:
> On Sun, Jun 29, 2014 at 08:28:34PM +0200, Tomas Henzl wrote:
>> On 06/27/2014 09:38 PM, Maurizio Lombardi wrote:
>>>>> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
>>>>> index 07934b0..a3e5648 100644
>>>>> --- a/drivers/scsi/be2iscsi/be_mgmt.c
>>>>> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
>>>>> @@ -1015,7 +1015,7 @@ int mgmt_set_ip(struct beiscsi_hba *phba,
>>>>> if (if_info->dhcp_state) {
>>>>> beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_CONFIG,
>>>>> "BG_%d : DHCP Already Enabled\n");
>>>>> - return 0;
>>>>> + goto exit;
>>>> rc should be initialised - so this needs to be added to your patch
>>> It is initialized at the beginning of the function, and it must contain zero when the "goto exit" is executed.
>> Correct, I haven't noticed the initialisation, sorry for the confusion.
> Is this a formal review from you?
I was under time pressure so I just wanted to remove my previous negative comment, but now -
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-07-07 11:31 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-27 12:55 [PATCH] b2iscsi: Fix memory leak in mgmt_set_ip() Maurizio Lombardi
2014-06-27 16:32 ` Tomas Henzl
2014-06-27 19:38 ` Maurizio Lombardi
2014-06-29 18:28 ` Tomas Henzl
2014-07-01 18:53 ` Christoph Hellwig
2014-07-07 11:29 ` Tomas Henzl
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.