Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5129593imu; Tue, 8 Jan 2019 12:04:04 -0800 (PST) X-Google-Smtp-Source: ALg8bN5pWmVv2ntizsCG71obvkAvaNjiVfQsxccFi5O5nAJDDBqBSaosJxzO68bt1e0TZh8eUR1I X-Received: by 2002:a62:26c7:: with SMTP id m190mr3129304pfm.79.1546977844052; Tue, 08 Jan 2019 12:04:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546977844; cv=none; d=google.com; s=arc-20160816; b=o6VXDDhLwgumjEilQA7N6ylPFzGkM9/4O6OnMPfmK1JFjnDvLrU56S5d6XhhSfeG0T 2ADE3R8btMwr3cPO0VFZDO0OVhBqsUwIT5EklEmgk4fAV+GuxF+tvLdXyduYRm5B2w4H u3l7cw7qg8gErF8Wa7ea9u0/knq7lLgzOM7A9ecwap8wVwc+VwvrL1nBA6vwbUgMHHp6 bT7EXXMPFDYL0ID2gqXVWiW+B/uwJMobjekpbFV3gAdsmrDnkcvlNqtgHYG+MCnxH0w0 nxIa85hkClyBGULUXF9OPNn7wad5dzgAWuYwUeKiLS9ClL5R9V4akivXDFokPWc6+bgm rJWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=nbXPg6kCDcDbGaCYN70AkKx/mukSUKnaU2xuxm9q95w=; b=QkttCANQzD4xlrHapb6Bxyy1RO4QEi8xjGDA+CYCWr4FQcVrFthKs7twGPW632AnNP yTezwBUaXZa5D8jcgSiXhuJ5CIZ9G2a4fUfug/TjDZEJYPzAQNvFCvRBZ4ewLSvKqkio UYK8rDb/HkZq9Gnxr7B4f46q9NmVO/JX4xkqrN3a/3up3/BatWJNfjBmH4ICFo24VXXf ngNJjxs/i+IoutaPbiw23FgKhZQVZTHwGGNxDnzOL+Xp1TDMOgezc9y/QPVb17MN1qn4 EfELTm4zrfAK6NuevzoDjztlqu2Pa1yYEZqp69KdV1lZC3RtK70EFjjqbQ2CkmROy+DS XOww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1sD6S4cn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n18si1056404pfj.30.2019.01.08.12.03.48; Tue, 08 Jan 2019 12:04:04 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1sD6S4cn; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732973AbfAHT7Z (ORCPT + 99 others); Tue, 8 Jan 2019 14:59:25 -0500 Received: from mail.kernel.org ([198.145.29.99]:36720 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730356AbfAHT3U (ORCPT ); Tue, 8 Jan 2019 14:29:20 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 472E920645; Tue, 8 Jan 2019 19:29:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546975759; bh=mtypxHq0a4vamiNHIFGeEMoptDQnE3J418frzcCqIoc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1sD6S4cnLz63UGCyEn2JMTOe0zI82A4Cz1ELBpFgB+YIy5CT7G+AJ8hijkDlSiiif De4Jdy5uRb246WJtVDomPQYTLd1TqdIHdFRFhvptMLUlMiTBQwl8tx1Q/ZyJSaKwGF 2gldLD1dZUZH/ICs+Jyri3tMZD2F1MDCaYhK+TY8= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Parvi Kaustubhi , Jason Gunthorpe , Sasha Levin , linux-rdma@vger.kernel.org Subject: [PATCH AUTOSEL 4.20 102/117] IB/usnic: Fix potential deadlock Date: Tue, 8 Jan 2019 14:26:10 -0500 Message-Id: <20190108192628.121270-102-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190108192628.121270-1-sashal@kernel.org> References: <20190108192628.121270-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Parvi Kaustubhi [ Upstream commit 8036e90f92aae2784b855a0007ae2d8154d28b3c ] Acquiring the rtnl lock while holding usdev_lock could result in a deadlock. For example: usnic_ib_query_port() | mutex_lock(&us_ibdev->usdev_lock) | ib_get_eth_speed() | rtnl_lock() rtnl_lock() | usnic_ib_netdevice_event() | mutex_lock(&us_ibdev->usdev_lock) This commit moves the usdev_lock acquisition after the rtnl lock has been released. This is safe to do because usdev_lock is not protecting anything being accessed in ib_get_eth_speed(). Hence, the correct order of holding locks (rtnl -> usdev_lock) is not violated. Signed-off-by: Parvi Kaustubhi Signed-off-by: Jason Gunthorpe Signed-off-by: Sasha Levin --- drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c index 0b91ff36768a..598e23cf01fc 100644 --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c @@ -336,13 +336,16 @@ int usnic_ib_query_port(struct ib_device *ibdev, u8 port, usnic_dbg("\n"); - mutex_lock(&us_ibdev->usdev_lock); if (ib_get_eth_speed(ibdev, port, &props->active_speed, - &props->active_width)) { - mutex_unlock(&us_ibdev->usdev_lock); + &props->active_width)) return -EINVAL; - } + /* + * usdev_lock is acquired after (and not before) ib_get_eth_speed call + * because acquiring rtnl_lock in ib_get_eth_speed, while holding + * usdev_lock could lead to a deadlock. + */ + mutex_lock(&us_ibdev->usdev_lock); /* props being zeroed by the caller, avoid zeroing it here */ props->lid = 0; -- 2.19.1