IB/rdmvat: Fix double vfree() in rvt_create_qp() error path
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 16 Aug 2016 20:26:29 +0000 (13:26 -0700)
committerDoug Ledford <dledford@redhat.com>
Mon, 22 Aug 2016 19:00:42 +0000 (15:00 -0400)
commit56c8ca510de2884b2f741e5fd8d3df6161378de6
treeeb5e5371b2811f9e26392fd05de2fd0efec7ebcf
parent08fe16f6192bccd5798e9b60461f7aa151b34cd4
IB/rdmvat: Fix double vfree() in rvt_create_qp() error path

The unwind logic for creating a user QP has a double vfree
of the non-shared receive queue when handling a "too many qps"
failure.

The code unwinds the mmmap info by decrementing a reference
count which will call rvt_release_mmap_info() which in turn
does the vfree() of the r_rq.wq.  The unwind code then does
the same free.

Fix by guarding the vfree() with the same test that is done
in close and only do the vfree() if qp->ip is NULL.

Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/sw/rdmavt/qp.c