Commit aae0484e authored by Zhu Yanjun's avatar Zhu Yanjun Committed by Jason Gunthorpe

IB/rxe: avoid srq memory leak

In rxe_queue_init, q and q->buf are allocated. In do_mmap_info, q->ip is
allocated. When error occurs, rxe_srq_from_init and the later error
handler do not free these allocated memories.  This will make memory leak.
Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@oracle.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 39f24956
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
* SOFTWARE. * SOFTWARE.
*/ */
#include <linux/vmalloc.h>
#include "rxe.h" #include "rxe.h"
#include "rxe_loc.h" #include "rxe_loc.h"
#include "rxe_queue.h" #include "rxe_queue.h"
...@@ -129,13 +130,18 @@ int rxe_srq_from_init(struct rxe_dev *rxe, struct rxe_srq *srq, ...@@ -129,13 +130,18 @@ int rxe_srq_from_init(struct rxe_dev *rxe, struct rxe_srq *srq,
err = do_mmap_info(rxe, uresp ? &uresp->mi : NULL, context, q->buf, err = do_mmap_info(rxe, uresp ? &uresp->mi : NULL, context, q->buf,
q->buf_size, &q->ip); q->buf_size, &q->ip);
if (err) if (err) {
vfree(q->buf);
kfree(q);
return err; return err;
}
if (uresp) { if (uresp) {
if (copy_to_user(&uresp->srq_num, &srq->srq_num, if (copy_to_user(&uresp->srq_num, &srq->srq_num,
sizeof(uresp->srq_num))) sizeof(uresp->srq_num))) {
rxe_queue_cleanup(q);
return -EFAULT; return -EFAULT;
}
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment