From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8A2F3C433E3 for ; Mon, 27 Jul 2020 09:57:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 56DED20786 for ; Mon, 27 Jul 2020 09:57:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1595843838; bh=C+LgWBhn6Kuqs8rTdsG6YhEg8KnvL3JldX9Tt+LmbKc=; h=From:To:Cc:Subject:Date:List-ID:From; b=WeLGupn4TNGuzHp7GCYW9njeskPeymtliss9I/QFflS//pSTcGNiGC2J34+1SL1Zn F0OgisFmRURlkc3/Yb1UA1FWtwsw7BjowzMuUHirUI6v6xwsUup/dyQVY7vQL1RRuJ lXXo9QkFwD3vb2YdSBAjG/EDVOuRxp4KwZw/NW84= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726315AbgG0J5R (ORCPT ); Mon, 27 Jul 2020 05:57:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:38732 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726139AbgG0J5R (ORCPT ); Mon, 27 Jul 2020 05:57:17 -0400 Received: from localhost (unknown [213.57.247.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C0A782075D; Mon, 27 Jul 2020 09:57:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1595843837; bh=C+LgWBhn6Kuqs8rTdsG6YhEg8KnvL3JldX9Tt+LmbKc=; h=From:To:Cc:Subject:Date:From; b=fBln0a4xmTqqdnVQdFcOymP6KBU+TNYN0rKAzCnz+nSgHzz8H0DrUBnZd9HappPrd fhLUu/pA05Gb9Qt3PudFW9+qIxdEhlfWs4NYUF7+15I8TvKSSnAr/XsexTwS86l+7/ Ov0I9Ju4+S1hYJVtwOJOKiaqakt2HBfQl5JA9ToU= From: Leon Romanovsky To: Doug Ledford , Jason Gunthorpe Cc: Jason Gunthorpe , Artemy Kovalyov , linux-rdma@vger.kernel.org Subject: [PATCH rdma-rc] RDMA/mlx5: Fix prefetch memory leak if get_prefetchable_mr fails Date: Mon, 27 Jul 2020 12:57:12 +0300 Message-Id: <20200727095712.495652-1-leon@kernel.org> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org From: Jason Gunthorpe destroy_prefetch_work() must always be called if the work is not going to be queued. The num_sge also should have been set to i, not i-1 which avoids the condition where it shouldn't have been called in the first place. Cc: stable@vger.kernel.org Fixes: fb985e278a30 ("RDMA/mlx5: Use SRCU properly in ODP prefetch") Signed-off-by: Jason Gunthorpe Signed-off-by: Leon Romanovsky --- drivers/infiniband/hw/mlx5/odp.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c index 4f1e46733830..cfd7efab114e 100644 --- a/drivers/infiniband/hw/mlx5/odp.c +++ b/drivers/infiniband/hw/mlx5/odp.c @@ -1806,9 +1806,7 @@ static bool init_prefetch_work(struct ib_pd *pd, work->frags[i].mr = get_prefetchable_mr(pd, advice, sg_list[i].lkey); if (!work->frags[i].mr) { - work->num_sge = i - 1; - if (i) - destroy_prefetch_work(work); + work->num_sge = i; return false; } @@ -1875,6 +1873,7 @@ int mlx5_ib_advise_mr_prefetch(struct ib_pd *pd, srcu_key = srcu_read_lock(&dev->odp_srcu); if (!init_prefetch_work(pd, advice, pf_flags, work, sg_list, num_sge)) { srcu_read_unlock(&dev->odp_srcu, srcu_key); + destroy_prefetch_work(work); return -EINVAL; } queue_work(system_unbound_wq, &work->work); -- 2.26.2