[PATCH 08/12] be2iscsi: Fix MCC WRB leak in open_connection

2016-02-01 Thread Jitendra Bhivare
In open with IP of unknown address family, only tag is freed and error
returned. MCC WRB allocated for the operation is not freed.

Added check for supported family of IP in the beginning before
allocating the tag and WRB.

Signed-off-by: Jitendra Bhivare 
---
 drivers/scsi/be2iscsi/be_mgmt.c | 18 +-
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
index 85044b8..ccac1d7 100644
--- a/drivers/scsi/be2iscsi/be_mgmt.c
+++ b/drivers/scsi/be2iscsi/be_mgmt.c
@@ -829,6 +829,13 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
unsigned short cid = beiscsi_ep->ep_cid;
struct be_sge *sge;
 
+   if (dst_addr->sa_family != PF_INET && dst_addr->sa_family != PF_INET6) {
+   beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
+   "BG_%d : unknown addr family %d\n",
+   dst_addr->sa_family);
+   return -EINVAL;
+   }
+
phwi_ctrlr = phba->phwi_ctrlr;
phwi_context = phwi_ctrlr->phwi_ctxt;
 
@@ -868,7 +875,8 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
beiscsi_ep->dst_addr = daddr_in->sin_addr.s_addr;
beiscsi_ep->dst_tcpport = ntohs(daddr_in->sin_port);
beiscsi_ep->ip_type = BE2_IPV4;
-   } else if (dst_addr->sa_family == PF_INET6) {
+   } else {
+   /* else its PF_INET6 family */
req->ip_address.ip_type = BE2_IPV6;
memcpy(>ip_address.addr,
   _in6->sin6_addr.in6_u.u6_addr8, 16);
@@ -877,14 +885,6 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
memcpy(_ep->dst6_addr,
   _in6->sin6_addr.in6_u.u6_addr8, 16);
beiscsi_ep->ip_type = BE2_IPV6;
-   } else{
-   beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
-   "BG_%d : unknown addr family %d\n",
-   dst_addr->sa_family);
-   mutex_unlock(>mbox_lock);
-   free_mcc_tag(>ctrl, tag);
-   return -EINVAL;
-
}
req->cid = cid;
i = phba->nxt_cqid++;
-- 
2.5.0

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 08/12] be2iscsi: Fix MCC WRB leak in open_connection

2016-02-01 Thread Johannes Thumshirn
On Mon, Feb 01, 2016 at 03:42:47PM +0530, Jitendra Bhivare wrote:
> In open with IP of unknown address family, only tag is freed and error
> returned. MCC WRB allocated for the operation is not freed.
> 
> Added check for supported family of IP in the beginning before
> allocating the tag and WRB.
> 
> Signed-off-by: Jitendra Bhivare 
> ---
>  drivers/scsi/be2iscsi/be_mgmt.c | 18 +-
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/scsi/be2iscsi/be_mgmt.c b/drivers/scsi/be2iscsi/be_mgmt.c
> index 85044b8..ccac1d7 100644
> --- a/drivers/scsi/be2iscsi/be_mgmt.c
> +++ b/drivers/scsi/be2iscsi/be_mgmt.c
> @@ -829,6 +829,13 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
>   unsigned short cid = beiscsi_ep->ep_cid;
>   struct be_sge *sge;
>  
> + if (dst_addr->sa_family != PF_INET && dst_addr->sa_family != PF_INET6) {
> + beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
> + "BG_%d : unknown addr family %d\n",
> + dst_addr->sa_family);
> + return -EINVAL;
> + }
> +
>   phwi_ctrlr = phba->phwi_ctrlr;
>   phwi_context = phwi_ctrlr->phwi_ctxt;
>  
> @@ -868,7 +875,8 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
>   beiscsi_ep->dst_addr = daddr_in->sin_addr.s_addr;
>   beiscsi_ep->dst_tcpport = ntohs(daddr_in->sin_port);
>   beiscsi_ep->ip_type = BE2_IPV4;
> - } else if (dst_addr->sa_family == PF_INET6) {
> + } else {
> + /* else its PF_INET6 family */
>   req->ip_address.ip_type = BE2_IPV6;
>   memcpy(>ip_address.addr,
>  _in6->sin6_addr.in6_u.u6_addr8, 16);
> @@ -877,14 +885,6 @@ int mgmt_open_connection(struct beiscsi_hba *phba,
>   memcpy(_ep->dst6_addr,
>  _in6->sin6_addr.in6_u.u6_addr8, 16);
>   beiscsi_ep->ip_type = BE2_IPV6;
> - } else{
> - beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_CONFIG,
> - "BG_%d : unknown addr family %d\n",
> - dst_addr->sa_family);
> - mutex_unlock(>mbox_lock);
> - free_mcc_tag(>ctrl, tag);
> - return -EINVAL;
> -
>   }
>   req->cid = cid;
>   i = phba->nxt_cqid++;
> -- 
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reviewed-by: Johannes Thumshirn 
-- 
Johannes Thumshirn  Storage
jthumsh...@suse.de+49 911 74053 689
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html