IB/qib: Fix memory leak of recv context when driver fails to initialize.
In qib_create_ctxts() we allocate an array to hold recv contexts. Then attempt to create data for those recv contexts. If that call to qib_create_ctxtdata() fails then an error is returned but the previously allocated memory is not freed. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
8572de9732
commit
06064a103f
|
@ -130,7 +130,6 @@ void qib_set_ctxtcnt(struct qib_devdata *dd)
|
|||
int qib_create_ctxts(struct qib_devdata *dd)
|
||||
{
|
||||
unsigned i;
|
||||
int ret;
|
||||
int local_node_id = pcibus_to_node(dd->pcidev->bus);
|
||||
|
||||
if (local_node_id < 0)
|
||||
|
@ -145,8 +144,7 @@ int qib_create_ctxts(struct qib_devdata *dd)
|
|||
if (!dd->rcd) {
|
||||
qib_dev_err(dd,
|
||||
"Unable to allocate ctxtdata array, failing\n");
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/* create (one or more) kctxt */
|
||||
|
@ -163,15 +161,14 @@ int qib_create_ctxts(struct qib_devdata *dd)
|
|||
if (!rcd) {
|
||||
qib_dev_err(dd,
|
||||
"Unable to allocate ctxtdata for Kernel ctxt, failing\n");
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
kfree(dd->rcd);
|
||||
dd->rcd = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
rcd->pkeys[0] = QIB_DEFAULT_P_KEY;
|
||||
rcd->seq_cnt = 1;
|
||||
}
|
||||
ret = 0;
|
||||
done:
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue