diff mbox

[V2] IB/hns: fix memory leak on ah on error return path

Message ID 20170808174102.28568-1-colin.king@canonical.com (mailing list archive)
State Accepted
Headers show

Commit Message

Colin King Aug. 8, 2017, 5:41 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

When dmac is NULL, ah is not being freed on the error return path. Fix
this by kfree'ing it.

Detected by CoverityScan, CID#1452636 ("Resource Leak")

Fixes: d8966fcd4c25 ("IB/core: Use rdma_ah_attr accessor functions")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/infiniband/hw/hns/hns_roce_ah.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Doug Ledford Aug. 16, 2017, 3:31 p.m. UTC | #1
On Fri, 2017-08-11 at 09:45 +0800, oulijun wrote:
> 在 2017/8/9 1:41, Colin King 写道:
> > From: Colin Ian King <colin.king@canonical.com>
> > 
> > When dmac is NULL, ah is not being freed on the error return path.
> > Fix
> > this by kfree'ing it.
> > 
> > Detected by CoverityScan, CID#1452636 ("Resource Leak")
> > 
> > Fixes: d8966fcd4c25 ("IB/core: Use rdma_ah_attr accessor
> > functions")
> > Signed-off-by: Colin Ian King <colin.king@canonical.com>
> > ---
> >  drivers/infiniband/hw/hns/hns_roce_ah.c | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/infiniband/hw/hns/hns_roce_ah.c
> > b/drivers/infiniband/hw/hns/hns_roce_ah.c
> > index f78a733a63ec..d545302b8ef8 100644
> > --- a/drivers/infiniband/hw/hns/hns_roce_ah.c
> > +++ b/drivers/infiniband/hw/hns/hns_roce_ah.c
> > @@ -64,8 +64,10 @@ struct ib_ah *hns_roce_create_ah(struct ib_pd
> > *ibpd,
> >  	} else {
> >  		u8 *dmac = rdma_ah_retrieve_dmac(ah_attr);
> >  
> > -		if (!dmac)
> > +		if (!dmac) {
> > +			kfree(ah);
> >  			return ERR_PTR(-EINVAL);
> > +		}
> >  		memcpy(ah->av.mac, dmac, ETH_ALEN);
> >  	}
> >  
> 
> Thank you for reviewing and fixing

Thanks, patch applied to -rc.
diff mbox

Patch

diff --git a/drivers/infiniband/hw/hns/hns_roce_ah.c b/drivers/infiniband/hw/hns/hns_roce_ah.c
index f78a733a63ec..d545302b8ef8 100644
--- a/drivers/infiniband/hw/hns/hns_roce_ah.c
+++ b/drivers/infiniband/hw/hns/hns_roce_ah.c
@@ -64,8 +64,10 @@  struct ib_ah *hns_roce_create_ah(struct ib_pd *ibpd,
 	} else {
 		u8 *dmac = rdma_ah_retrieve_dmac(ah_attr);
 
-		if (!dmac)
+		if (!dmac) {
+			kfree(ah);
 			return ERR_PTR(-EINVAL);
+		}
 		memcpy(ah->av.mac, dmac, ETH_ALEN);
 	}