> On 25 Jun 2021, at 07:49, Mark Zhang <markzhang@xxxxxxxxxx> wrote: > > On 6/25/2021 2:55 AM, Gerd Rausch wrote: >> Fix a memory leak when "rmda_resolve_route" is called >> more than once on the same "rdma_cm_id". >> Signed-off-by: Gerd Rausch <gerd.rausch@xxxxxxxxxx> >> --- >> drivers/infiniband/core/cma.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c >> index ab148a696c0c..4a76d5b4163e 100644 >> --- a/drivers/infiniband/core/cma.c >> +++ b/drivers/infiniband/core/cma.c >> @@ -2819,7 +2819,8 @@ static int cma_resolve_ib_route(struct rdma_id_private *id_priv, >> cma_init_resolve_route_work(work, id_priv); >> - route->path_rec = kmalloc(sizeof *route->path_rec, GFP_KERNEL); >> + if (!route->path_rec) >> + route->path_rec = kmalloc(sizeof *route->path_rec, GFP_KERNEL); >> if (!route->path_rec) { >> ret = -ENOMEM; >> goto err1; > > If route->path_rec does exist (meaning this is not the first time called), then it would be freed if cma_query_ib_route() below is failed, is it good? This may happen if rdma_resolve_route() is called after a route error event has been received. In that case, the state is set back to RDMA_CM_ADDR_RESOLVED, so it seems the API allows rdma_resolve_route() to be called again without renewing the cm_id in this case. Another thing, if this fix is eligible, it should probably also go into cma_resolve_iboe_route() as well. Thxs, Håkon