From patchwork Fri Nov 30 23:26:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matteo Croce X-Patchwork-Id: 1006253 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=fail (p=none dis=none) header.from=redhat.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4369WX5pyHz9s47 for ; Sat, 1 Dec 2018 10:26:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726641AbeLAKhZ (ORCPT ); Sat, 1 Dec 2018 05:37:25 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:54215 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725790AbeLAKhZ (ORCPT ); Sat, 1 Dec 2018 05:37:25 -0500 Received: by mail-wm1-f67.google.com with SMTP id y1so505866wmi.3 for ; Fri, 30 Nov 2018 15:26:29 -0800 (PST) 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:mime-version :content-transfer-encoding; bh=8hzifqli1uBVlm1pmK8cZSZhuPURxbiAeqZl3ULXlGY=; b=GRbHKTSVDOmryInSEk4wRhJoAbaIs+q6uapMt7yTCNSW/XEq1P+lepx16XgHJuCf9R 0hX5G/W1vFXut4JwO6HZ0h8w2/WzG1XeQyG8wPSYwXl1+e4XaVv3dyOxQyGRonLE8bVe PfRo1UBZKTeCGrcK5XQxiJm9fY6M6G3vLa2toixg6ZjlDFKR8XvDz6BBBdfJbJxx6guR 6W/qu1iSwo+lcfdQl6ydOEsGvIWDNkMaCRZXXjMJafQ81+yMRq3BfaYpL+7a6JRJKVNW BAPYTT2QJEGaatanEoA4vZ2u0FN0Qvzv9Qb5Q10LhwUtVcprz3MAp3Xt3cf3euRxa/XT DNOA== X-Gm-Message-State: AA+aEWbKE5ecS9GQU3jjIDBUJFKTaBzZza3Pw4MGuAZyjyWhMgkopad5 Yhq95VC2F+vSP/mndidNLnVtHDMqXyQ= X-Google-Smtp-Source: AFSGD/Wwgc9g4K3B3eiSsTdqn19pjSmll/f9UYAIfa2tMxuUQVViiXyiWvKkkfCm8WmvZm5VEVSAMA== X-Received: by 2002:a1c:7004:: with SMTP id l4-v6mr536782wmc.93.1543620388553; Fri, 30 Nov 2018 15:26:28 -0800 (PST) Received: from raver.teknoraver.net (net-93-66-170-114.cust.vodafonedsl.it. [93.66.170.114]) by smtp.gmail.com with ESMTPSA id h2sm4340085wrv.87.2018.11.30.15.26.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 30 Nov 2018 15:26:27 -0800 (PST) From: Matteo Croce To: netdev@vger.kernel.org Cc: Patrick McHardy , Jeff Kirsher , Alexander Duyck Subject: [PATCH net] macvlan: return correct error value Date: Sat, 1 Dec 2018 00:26:27 +0100 Message-Id: <20181130232627.8524-1-mcroce@redhat.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org A MAC address must be unique among all the macvlan devices with the same lower device. The only exception is the passthru [sic] mode, which shares the lower device address. When duplicate addresses are detected, EBUSY is returned when bringing the interface up: # ip link add macvlan0 link eth0 type macvlan # read addr --- drivers/net/macvlan.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index fc8d5f1ee1ad..0da3d36b283b 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -608,7 +608,7 @@ static int macvlan_open(struct net_device *dev) goto hash_add; } - err = -EBUSY; + err = -EADDRINUSE; if (macvlan_addr_busy(vlan->port, dev->dev_addr)) goto out; @@ -706,7 +706,7 @@ static int macvlan_sync_address(struct net_device *dev, unsigned char *addr) } else { /* Rehash and update the device filters */ if (macvlan_addr_busy(vlan->port, addr)) - return -EBUSY; + return -EADDRINUSE; if (!macvlan_passthru(port)) { err = dev_uc_add(lowerdev, addr); @@ -747,6 +747,9 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p) return dev_set_mac_address(vlan->lowerdev, addr); } + if (macvlan_addr_busy(vlan->port, addr->sa_data)) + return -EADDRINUSE; + return macvlan_sync_address(dev, addr->sa_data); }