Skip to content

Commit

Permalink
IB/ipath: Fix memory leak in ipath_resize_cq() if copy_to_user() fails
Browse files Browse the repository at this point in the history
Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com>
Signed-off-by: Patrick Marchand Latifi <patrick.latifi@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
  • Loading branch information
Ralph Campbell authored and Roland Dreier committed Nov 13, 2007
1 parent 3bba11e commit a6e7550
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions drivers/infiniband/hw/ipath/ipath_cq.c
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)

ret = ib_copy_to_udata(udata, &offset, sizeof(offset));
if (ret)
goto bail;
goto bail_free;
}

spin_lock_irq(&cq->lock);
Expand All @@ -424,10 +424,8 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
else
n = head - tail;
if (unlikely((u32)cqe < n)) {
spin_unlock_irq(&cq->lock);
vfree(wc);
ret = -EOVERFLOW;
goto bail;
goto bail_unlock;
}
for (n = 0; tail != head; n++) {
if (cq->ip)
Expand Down Expand Up @@ -459,7 +457,12 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
}

ret = 0;
goto bail;

bail_unlock:
spin_unlock_irq(&cq->lock);
bail_free:
vfree(wc);
bail:
return ret;
}

0 comments on commit a6e7550

Please sign in to comment.