Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 350703fa authored by Zhu Yanjun's avatar Zhu Yanjun Committed by Greg Kroah-Hartman
Browse files

IB/rxe: avoid srq memory leak



[ Upstream commit aae0484e15f062ad2c2502e68e15dfb8b8f84608 ]

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>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent e3db306d
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
 * SOFTWARE.
 */

#include <linux/vmalloc.h>
#include "rxe.h"
#include "rxe_loc.h"
#include "rxe_queue.h"
@@ -129,14 +130,19 @@ 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,
			   q->buf_size, &q->ip);
	if (err)
	if (err) {
		vfree(q->buf);
		kfree(q);
		return err;
	}

	if (uresp) {
		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 0;
}