From patchwork Fri Apr 19 06:31:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hangbin Liu X-Patchwork-Id: 1088197 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="sRpIx9ZU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44m6V82sFTz9s70 for ; Sat, 20 Apr 2019 06:08:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727875AbfDSUIO (ORCPT ); Fri, 19 Apr 2019 16:08:14 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:46865 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726187AbfDSUIO (ORCPT ); Fri, 19 Apr 2019 16:08:14 -0400 Received: by mail-pg1-f195.google.com with SMTP id v2so657650pge.13 for ; Fri, 19 Apr 2019 13:08:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BFDzRY7ImZrFIuBbberMN3OxdDtFNoIxfN4IV+bfSNc=; b=sRpIx9ZU5lSsX7Gibp5tkB9DzE/N1EqmHbAP9NMVRqN+RVZF7yr9PDuChO2UPMnHbg N/eUAJZK6UUbu8i/uBBuZ06qWcpZNVP9WcDq/b+BQWK19D4ccEsPLr7kDMOUa2oVHLH7 IDYBCA83b9W1J9rCcdWuavfKfCGPog1+8kngCn5jClV4DBlzlxaYoUemWD5oZ2BdyVrh YMbajZJgmJ+wDtoKNhtnfa0WbF+hDYBUzdUJASJRRICUtmnReSevIsIUWCyxiC5TYmMB kGnddGL7geK08tOTbZCTchre9+EqGMXGV1FxrVJqfAtYc0fLWK3jMrVK8IfXwls9qvHe 5gww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BFDzRY7ImZrFIuBbberMN3OxdDtFNoIxfN4IV+bfSNc=; b=AsxqmXlX78G5BQ+c/MG0v2l4PR1YhSUv8r9ZPNX82U6QXXrl8wnpgS6JWHT5UhQ+yr DsINc7y1TnTqJuuYeMlMGpeHDP3V/cSA09CzgvIe91g2zlzVj1SCnWJHvbsTDkvv7rmd 7Q4yUwNAmW5fnaZYmDKpTf8acD91w8CKgQSUHFQuhM3p/it0KKWmkg30roUIgQjk1qFT obYX1syV4uduUbefkDEBlIxr9+8wtfD9n2f4MjPmmd8gdMy2kS2QkIAKHeW83JfK8kJF jRF0hWYxCH0PSRcsbXmlwNDPhY5jFOd2fyUcKG8C6jGFwyftqJr1IPSHhR0H91hC8XeI fQ/Q== X-Gm-Message-State: APjAAAWMBn8ChxinrnYdfHVgq3Wh7/K/U7J8pmz34qpCHoj9QXWi2fhS rXQXXlUVluHxe22DjhN9EBhKO+88cpk= X-Google-Smtp-Source: APXvYqy3ja4C7Hor4jEfQoHw6oUjUaJrwoZhzZWWOq1L+u+cCzpVGn+kDHxHSBMMWdXA8vUlg7kHzQ== X-Received: by 2002:a63:79c3:: with SMTP id u186mr2230674pgc.20.1555655474764; Thu, 18 Apr 2019 23:31:14 -0700 (PDT) Received: from dhcp-12-139.nay.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id n22sm4978145pfa.51.2019.04.18.23.31.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Apr 2019 23:31:13 -0700 (PDT) From: Hangbin Liu To: netdev@vger.kernel.org Cc: Jiri Pirko , Xin Long , davem@davemloft.net, Hangbin Liu Subject: [PATCHv2 net] team: fix possible recursive locking when add slaves Date: Fri, 19 Apr 2019 14:31:00 +0800 Message-Id: <20190419063100.5224-1-liuhangbin@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190417121211.21063-1-liuhangbin@gmail.com> References: <20190417121211.21063-1-liuhangbin@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If we add a bond device which is already the master of the team interface, we will hold the team->lock in team_add_slave() first and then request the lock in team_set_mac_address() again. The functions are called like: - team_add_slave() - team_port_add() - team_port_enter() - team_modeop_port_enter() - __set_port_dev_addr() - dev_set_mac_address() - bond_set_mac_address() - dev_set_mac_address() - team_set_mac_address Although team_upper_dev_link() would check the upper devices but it is called too late. Fix it by adding a checking before processing the slave. v2: Do not split the string in netdev_err() Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device") Acked-by: Jiri Pirko Signed-off-by: Hangbin Liu --- drivers/net/team/team.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 9ce61b019aad..16963f7a88f7 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1156,6 +1156,13 @@ static int team_port_add(struct team *team, struct net_device *port_dev, return -EINVAL; } + if (netdev_has_upper_dev(dev, port_dev)) { + NL_SET_ERR_MSG(extack, "Device is already an upper device of the team interface"); + netdev_err(dev, "Device %s is already an upper device of the team interface\n", + portname); + return -EBUSY; + } + if (port_dev->features & NETIF_F_VLAN_CHALLENGED && vlan_uses_dev(dev)) { NL_SET_ERR_MSG(extack, "Device is VLAN challenged and team device has VLAN set up");