re: RDMA/iw_cxgb4: Low resource fixes for Memory registration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Hariprasad S,

The patch 0f8ab0b6e91b: "RDMA/iw_cxgb4: Low resource fixes for Memory
registration" from Jun 10, 2016, leads to the following static
checker warning:

	drivers/infiniband/hw/cxgb4/mem.c:612 c4iw_alloc_mw()
	error: use kfree_skb() here instead of kfree(mhp->dereg_skb)

drivers/infiniband/hw/cxgb4/mem.c
   600          mhp = kzalloc(sizeof(*mhp), GFP_KERNEL);
   601          if (!mhp)
   602                  return ERR_PTR(-ENOMEM);
   603  
   604          mhp->dereg_skb = alloc_skb(SGE_MAX_WR_LEN, GFP_KERNEL);
   605          if (!mhp->dereg_skb) {
   606                  kfree(mhp);
   607                  return ERR_PTR(-ENOMEM);
   608          }
   609  
   610          ret = allocate_window(&rhp->rdev, &stag, php->pdid);
   611          if (ret) {
   612                  kfree(mhp->dereg_skb);

Should be kfree_skb(mhp->dereg_skb);.  This code would be slightly nicer
if it used gotos to unwind.

   613                  kfree(mhp);
   614                  return ERR_PTR(ret);
   615          }
   616          mhp->rhp = rhp;
   617          mhp->attr.pdid = php->pdid;
   618          mhp->attr.type = FW_RI_STAG_MW;
   619          mhp->attr.stag = stag;
   620          mmid = (stag) >> 8;
   621          mhp->ibmw.rkey = stag;
   622          if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) {
   623                  deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb);
   624                  kfree(mhp->dereg_skb);


kfree_skb().

   625                  kfree(mhp);
   626                  return ERR_PTR(-ENOMEM);
   627          }
   628          PDBG("%s mmid 0x%x mhp %p stag 0x%x\n", __func__, mmid, mhp, stag);
   629          return &(mhp->ibmw);
   630  }
   631  
   632  int c4iw_dealloc_mw(struct ib_mw *mw)
   633  {
   634          struct c4iw_dev *rhp;
   635          struct c4iw_mw *mhp;
   636          u32 mmid;
   637  
   638          mhp = to_c4iw_mw(mw);
   639          rhp = mhp->rhp;
   640          mmid = (mw->rkey) >> 8;
   641          remove_handle(rhp, &rhp->mmidr, mmid);
   642          deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb);

It looks like there should be a kfree_skb() here as well.  We're leaking
a bit of memory.

   643          kfree(mhp);
   644          PDBG("%s ib_mw %p mmid 0x%x ptr %p\n", __func__, mw, mmid, mhp);
   645          return 0;
   646  }

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux