Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4752588pxj; Wed, 12 May 2021 12:25:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwg+HJzKNOD+ALrwHYd1bT6gx/3VnrCGnMS39F0QtqH1NtTk2cnBfVlIXvbRfQTeGnlV3kV X-Received: by 2002:a17:906:5211:: with SMTP id g17mr11739062ejm.281.1620847545220; Wed, 12 May 2021 12:25:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620847545; cv=none; d=google.com; s=arc-20160816; b=CDDXqHMFXP1MjBRY/lMEelIhDopPkHBst9S8AFs++yr8i1ERuNT9GZzY9kZDP4I+gG v694SRb3PxN5/IRMOwTtxnJYQXg6YxpW1bJ9mjhaCgPEWR9gpSMYJ5QQ82HFEDmhy28x b2KqtKk6MRU+LkPxptqK136zO8UOtcyfR868G+ueMgezqLHzgDwdoT0taGVqDGvzspRu aoVf+DOxKUmISRpfi9vqclZg8bfWGCt71cvQwBQC0iChDj+T21550zZstQJGqnpg3wzv t77ztzLK5rNLroeLeUS5pe8Qm+5/D9PI38QiXP2OMRNVfGh3rAvOAPOxnirND+bd/z9Y nkYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=0PvvAby+P6YHTa8g0B+C6pzrENTAmLhtT9EQ5G+A2Ds=; b=C5RR0EQqg/rbwtmMEHdFkHKa2dwv0zLjAGNKhZg/z5skrcWw5IcFfPZIREqOFCdVAE PrBCJFq9f/LUgKNP/TpUhaJrBVDfo4VTioePHEgIIZSCn4DD3ezn/H0zfvqh5pVWVplu RmqvopbKyNlZbpsvBoc2GZ9huntyzYICHZJJN/64qU3Oyvlg/wHuLteOqU8C3UEFJ0sR ctY0UP1K6HMyAwWaCycOxtIgIxjuYSBg6m5Y4O22rSgznlN2xMB3zSu1vjhZAS2ftsjl rpFBrkfxIb84fuJ++A5jQDeRbOD24UQZNESXeO6EnOWJGys6fZMXe+2FAjW5tIbvEit8 SdFw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ob5Kjtdh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id sb9si945825ejb.411.2021.05.12.12.25.21; Wed, 12 May 2021 12:25:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Ob5Kjtdh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378744AbhELTRq (ORCPT + 99 others); Wed, 12 May 2021 15:17:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:46602 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236558AbhELQsI (ORCPT ); Wed, 12 May 2021 12:48:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1555861E80; Wed, 12 May 2021 16:15:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620836135; bh=qEK7PMN0OZjtpuCNEB93d0Ca9vjOQzdZwC26fXqx4RI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ob5Kjtdh2hOqNJmM74btvg+/Edjo1rz6W9aNCCTknWhHBhCBZ6wk95pK4lGomK3j5 MW0y7WvzRyVAYqoaa6uQH//D4SVhvrbu82bKqfIy8x43zFWOf3gFSlyGpukZx335o4 fgMVfb/1vFlsSmhx3TQaXA9HNqp5v+S0qww23r1s= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shay Drory , Leon Romanovsky , Jason Gunthorpe , Sasha Levin Subject: [PATCH 5.12 624/677] RDMA/core: Add CM to restrack after successful attachment to a device Date: Wed, 12 May 2021 16:51:10 +0200 Message-Id: <20210512144858.093159928@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shay Drory [ Upstream commit cb5cd0ea4eb3ce338a593a5331ddb4986ae20faa ] The device attach triggers addition of CM_ID to the restrack DB. However, when error occurs, we releasing this device, but defer CM_ID release. This causes to the situation where restrack sees CM_ID that is not valid anymore. As a solution, add the CM_ID to the resource tracking DB only after the attachment is finished. Found by syzcaller: infiniband syz0: added syz_tun rdma_rxe: ignoring netdev event = 10 for syz_tun infiniband syz0: set down infiniband syz0: ib_query_port failed (-19) restrack: ------------[ cut here ]------------ infiniband syz0: BUG: RESTRACK detected leak of resources restrack: User CM_ID object allocated by syz-executor716 is not freed restrack: ------------[ cut here ]------------ Fixes: b09c4d701220 ("RDMA/restrack: Improve readability in task name management") Link: https://lore.kernel.org/r/ab93e56ba831eac65c322b3256796fa1589ec0bb.1618753862.git.leonro@nvidia.com Signed-off-by: Shay Drory Signed-off-by: Leon Romanovsky Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/core/cma.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 94096511599f..6ac07911a17b 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -463,7 +463,6 @@ static void _cma_attach_to_dev(struct rdma_id_private *id_priv, id_priv->id.route.addr.dev_addr.transport = rdma_node_get_transport(cma_dev->device->node_type); list_add_tail(&id_priv->list, &cma_dev->id_list); - rdma_restrack_add(&id_priv->res); trace_cm_id_attach(id_priv, cma_dev->device); } @@ -700,6 +699,7 @@ static int cma_ib_acquire_dev(struct rdma_id_private *id_priv, mutex_lock(&lock); cma_attach_to_dev(id_priv, listen_id_priv->cma_dev); mutex_unlock(&lock); + rdma_restrack_add(&id_priv->res); return 0; } @@ -754,8 +754,10 @@ static int cma_iw_acquire_dev(struct rdma_id_private *id_priv, } out: - if (!ret) + if (!ret) { cma_attach_to_dev(id_priv, cma_dev); + rdma_restrack_add(&id_priv->res); + } mutex_unlock(&lock); return ret; @@ -816,6 +818,7 @@ static int cma_resolve_ib_dev(struct rdma_id_private *id_priv) found: cma_attach_to_dev(id_priv, cma_dev); + rdma_restrack_add(&id_priv->res); mutex_unlock(&lock); addr = (struct sockaddr_ib *)cma_src_addr(id_priv); memcpy(&addr->sib_addr, &sgid, sizeof(sgid)); @@ -2529,6 +2532,7 @@ static int cma_listen_on_dev(struct rdma_id_private *id_priv, rdma_addr_size(cma_src_addr(id_priv))); _cma_attach_to_dev(dev_id_priv, cma_dev); + rdma_restrack_add(&dev_id_priv->res); cma_id_get(id_priv); dev_id_priv->internal_id = 1; dev_id_priv->afonly = id_priv->afonly; @@ -3169,6 +3173,7 @@ port_found: ib_addr_set_pkey(&id_priv->id.route.addr.dev_addr, pkey); id_priv->id.port_num = p; cma_attach_to_dev(id_priv, cma_dev); + rdma_restrack_add(&id_priv->res); cma_set_loopback(cma_src_addr(id_priv)); out: mutex_unlock(&lock); @@ -3201,6 +3206,7 @@ static void addr_handler(int status, struct sockaddr *src_addr, if (status) pr_debug_ratelimited("RDMA CM: ADDR_ERROR: failed to acquire device. status %d\n", status); + rdma_restrack_add(&id_priv->res); } else if (status) { pr_debug_ratelimited("RDMA CM: ADDR_ERROR: failed to resolve IP. status %d\n", status); } @@ -3812,6 +3818,8 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr) if (ret) goto err2; + if (!cma_any_addr(addr)) + rdma_restrack_add(&id_priv->res); return 0; err2: if (id_priv->cma_dev) -- 2.30.2