Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

RDMA/iw_cxgb4: Use kfree_skb instead of kfree

The commit 0f8ab0b6e91b4d53 ("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)

Also fixes skb leak in c4iw_dealloc_mw

Fixes: 0f8ab0b6e91b4d53 ("RDMA/iw_cxgb4: Low resource fixes for Memory registration")

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Hariprasad Shenai <hariprasad@chelsio.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>

authored by

Hariprasad S and committed by
Doug Ledford
56b2eca3 dd6b0241

+15 -11
+15 -11
drivers/infiniband/hw/cxgb4/mem.c
··· 603 603 604 604 mhp->dereg_skb = alloc_skb(SGE_MAX_WR_LEN, GFP_KERNEL); 605 605 if (!mhp->dereg_skb) { 606 - kfree(mhp); 607 - return ERR_PTR(-ENOMEM); 606 + ret = -ENOMEM; 607 + goto free_mhp; 608 608 } 609 609 610 610 ret = allocate_window(&rhp->rdev, &stag, php->pdid); 611 - if (ret) { 612 - kfree(mhp->dereg_skb); 613 - kfree(mhp); 614 - return ERR_PTR(ret); 615 - } 611 + if (ret) 612 + goto free_skb; 616 613 mhp->rhp = rhp; 617 614 mhp->attr.pdid = php->pdid; 618 615 mhp->attr.type = FW_RI_STAG_MW; ··· 617 620 mmid = (stag) >> 8; 618 621 mhp->ibmw.rkey = stag; 619 622 if (insert_handle(rhp, &rhp->mmidr, mhp, mmid)) { 620 - deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb); 621 - kfree(mhp->dereg_skb); 622 - kfree(mhp); 623 - return ERR_PTR(-ENOMEM); 623 + ret = -ENOMEM; 624 + goto dealloc_win; 624 625 } 625 626 PDBG("%s mmid 0x%x mhp %p stag 0x%x\n", __func__, mmid, mhp, stag); 626 627 return &(mhp->ibmw); 628 + 629 + dealloc_win: 630 + deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb); 631 + free_skb: 632 + kfree_skb(mhp->dereg_skb); 633 + free_mhp: 634 + kfree(mhp); 635 + return ERR_PTR(ret); 627 636 } 628 637 629 638 int c4iw_dealloc_mw(struct ib_mw *mw) ··· 643 640 mmid = (mw->rkey) >> 8; 644 641 remove_handle(rhp, &rhp->mmidr, mmid); 645 642 deallocate_window(&rhp->rdev, mhp->attr.stag, mhp->dereg_skb); 643 + kfree_skb(mhp->dereg_skb); 646 644 kfree(mhp); 647 645 PDBG("%s ib_mw %p mmid 0x%x ptr %p\n", __func__, mw, mmid, mhp); 648 646 return 0;