From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=209.85.221.51 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794089156; b=ZG1ingdBMMBR2Ezl9I6We1jyat/2QiTPHyycUnmHyxZ2Fa4fkOngiAVBjG4xTvX1Q/OH 7v0J9xUx5O1N9uHGwuvNSwbkTSpJ8U7gFhrwR5ksMxC955/Cz0Z9hT+U6Zm8Nz/5Mwlu7 9ChXk6G9UEwJVtIwtIbcpedIV16jJUdwADpFdqRWCSlvS90igeT5cBS1EDz7axicYWcXG fk7Za80lcbjGD2lukN/UArQA4HDDzztxN6eOCAruoljrEi4tP/SuXuC1TrBo30fXKzuXb ePysVy+pA4bq9mWlQUEpHD5vvdJ02/Ycy9iCpZVH5kyoFAMsnd7u8oZa3ZG1CMC027w== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794089156; h=DMARC-Filter:Received:DKIM-Signature:X-Google-DKIM-Signature: X-Forwarded-Encrypted:X-Gm-Message-State:X-Gm-Gg:X-Received:Received: From:To:Cc:Subject:Date:Message-ID:X-Mailer:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding; bh=aKP/DpJRzJyt9/8HhoM5ZhK9oYmsUYgljoAV0yx+rFI=; b=LuZ7Bq0MLhb45SjA8zHCtqgMprKdUsIb9z8D5O3xh+qhInBXpbQ0mPDbqUlg1NSn/INx UCtQ40GapN3WEmmg1DoJKcfxJmH2XvzFSGWK5HKcvhfd95yphW34eUNLhoL6QQDCiVwQz 0p29nDFYOntapZxCchoknIPRRI9uWjJVIBZ/Nbf3RjIAPDkEXmLPn1RBxvTbZOZRA+2pG CuYHmk624r3QxnRBGAapm9ERB83lbNwrovqvcpnMeeIe38r2Xyvm2u/KD5qdf4hgFty1g pN5T3vCjDBr8mYxqqrItS3bW7eLMvtt2eofLavFZ/C3Anifx9qmWByVg2Oh8vWHQ/Fg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=0Z4tRWN1; arc=none smtp.remote-ip=209.85.221.51 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 02239606D839 for ; Sat, 7 Nov 2026 22:05:55 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 02239606D839 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20260707 header.b=0Z4tRWN1 Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-490380c73fbso1126f8f.1 for ; Sat, 07 Nov 2026 14:05:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20260707; t=1794089154; x=1794693954; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=aKP/DpJRzJyt9/8HhoM5ZhK9oYmsUYgljoAV0yx+rFI=; b=0Z4tRWN1mk2FwpqxkqSDckSzbbByd8wQ7IRIxNkV3PqQ94KO3Xm++Rj8wUzl59GVKR 991wjvgrvDRu1NlfyMpXEql7xvwi7YhYygEd2SogkhV1UDJLk7ANj8+uMn0lAYV9fKej o+LIaqy871zlHDrnN1JAx/m5GGNUPI+BiLfhq7YCMxnPfj/w8DCfeAXXIrrHanYQagal YfY3XMMbf7U3wYn3j64bfGrY5A9hl3lnAvZ2nn8/eftyYotZgsU68biZ2jqQya58ixdr JCNaLcaq1RvMVRfmUjZ+S34W5kdWaZPSCU/wGMsR6TrI9pkbmIS6kTERLvf2vk3ci73a sY2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1794089154; x=1794693954; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=aKP/DpJRzJyt9/8HhoM5ZhK9oYmsUYgljoAV0yx+rFI=; b=J27C2BsKyGnzsELMAcUwSeQbCEFM4oJ8Cbty1XaCJhr3t731ECmzAkEyul8ODRgp/Y ri4q3Vw2126O1km/ePPM550mEKxMtSMrb54JYzleqAkpLbCuu08KrgKTc0m6cql3REJp qj+ZecD5pXgvBRalZ7Cam3lLPQduNc8M01xV/yK/P0Kkk7nWLHY6oZmwYFnrVeBBAve+ Xm+tuZZ0Ty8TbIoO3ndWWp7gjTMzfV835z7h+MakrQGICJB7BQ+tgquCqqCR/WJnoUJ1 o6VMVWTujHAkH8el0egf+KlB5bCH7itUZAo18uUXlZB9B1c+5EdVZ5psAZqdL3gj0O7/ YYyA== X-Forwarded-Encrypted: i=1; AL+hErEUgH0OdRB9e405UkW5SBT4/OR3z2bvLc++vCGP8rnAsceuuuCR7fkZjtEuTUNunx0G39gBuzFOOAxX+l4=@vger.kernel.org X-Gm-Message-State: APuU4Z+PhUPnT4A662MlNcO+CYeUrsrAO/X6zIS7L3xGA/FvFJyhmQC2 HViJHlPCpvOTDwWrOgMw6D0V9Om4zCGO/K2N5tlAwOwsBpjgG2AxKsQ7AhcTAPfUcVk= X-Gm-Gg: AYBFou1P5w62pcV5Z+QvydSKvZb4QoKTlZaZkgWlUKP3/DHKLu0XvxPl9nOmt6h9Qcc 1QBVUfAqYXavbAF2iTFvZLlHXLHG7pznwgvqnBnDe4t3KW/IxxN4QL54z9ZbDDZfq+jmI32UYqL T8fN5UoLPE6khgevEVoz23wNRRPhhwcwIrlGydbnTRGO1NplGlpvE7+4a0KbpXDdpRgvxDKleaE la1di4owwymN0w0u7zYBbVJHGOi5uc5XajC0xWUMKaTJkDBfcBywSFxgqKumODVYovM7MYAZ7HT BPqrzTU1t28s3Vv1GG7tRpzMxfN2gokQNW5iOzPuOz7HfxvkTQpmKlWJz7tFnvyEakAQUJa6UAh 8hpbakKEdpzrTP5MOhQX0Gc2IGNzZw1qb7ARIKbC86TJOYZZjWwMtLLL0gLHv59ltWxQZjUkzMl OLoGRWPKaZnomS0XyoRG13n2LSxnpMeV2f15zNUFw8T1ZsBFQKWVZHj4cJ9pvQohSDyo45uNq/V nRBUMQ9Q3bNfj6Eq6itY3uUh5LZ5nAE9Xgq/QUB8zT2mlN2IbuSWl0bEVTpz5nWXtjQwH46mGFj 18Z22Xf8XHkpHZ7JTInTbuFg+ZaSada+gJsBZVfoBMDdj+3khHJQOPIKiFmXdMwn2o3B+S4wO8g Q6fVDw1zuvM3CHY6mYEuvjXD+HXWLf8z7Yagg+5DMEKVu8K1o/Go+PKwELLheHQcGi9r3EcUaae euoATzFaU8 X-Received: by 2002:a05:6000:220d:b0:48e:eb:56a5 with SMTP id ffacd0b85a97d-49583dec0camr553506f8f.4.1794089154261; Sat, 07 Nov 2026 14:05:54 -0800 (PST) Received: from L-022584.energy.envision.com (dynamic-077-189-161-157.77.189.pool.telefonica.de. [77.189.161.157]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-49597b1f969sm358958f8f.50.2026.11.07.14.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Nov 2026 14:05:53 -0800 (PST) From: Xin Xie To: netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Cc: davem@davemloft.net, edumazet@kernel.org, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, andrew+netdev@lunn.ch, shuah@kernel.org, kees@kernel.org, petr.wozniak@gmail.com, qingfang.deng@linux.dev, fmaurer@redhat.com, luka.gejak@linux.dev, bigeasy@linutronix.de, xiaoliang.yang_1@nxp.com, skhawaja@google.com, liuhangbin@gmail.com, stable@vger.kernel.org, sdf.kernel@gmail.com, xiexinet@gmail.com, lukma@denx.de, fmancera@suse.de, danishanwar@ti.com, syzbot+fbf74291c3b7e753b481@syzkaller.appspotmail.com, sd@queasysnail.net Subject: [PATCH net v8 2/4] net: hsr: refuse forwarding devices as HSR/PRP ports Date: Sat, 7 Nov 2026 23:05:41 +0100 Message-ID: <20261107220544.20-3-xiexinet@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20261107220544.20-1-xiexinet@gmail.com> References: <20261107220544.20-1-xiexinet@gmail.com> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit syzbot reported recursive locking with an HSR device whose slave is a bridge, and that bridge has the master of a second HSR device as a port. The first device transmits its supervision frames with its seqnr_lock held; the bridge floods them to the second HSR master, whose hsr_dev_xmit() takes the seqnr_lock of that device: WARNING: possible recursive locking detected ... hsr_dev_xmit+0x18a/0x210 net/hsr/hsr_device.c:234 ... br_dev_xmit+0x1202/0x1b40 ... hsr_forward_skb+0x171c/0x2ac0 net/hsr/hsr_forward.c:728 send_hsr_supervision_frame+0x63b/0xcc0 net/hsr/hsr_device.c:351 hsr_announce+0x1f8/0x3a0 net/hsr/hsr_device.c:408 Interlink RX forwards to the slaves with the same lock held. A chain of two devices does not deadlock, but such a port makes no sense: an HSR ring and the two PRP LANs are attached to the node directly. Refuse bridge and OVS masters, bond and team masters (also without ports, since ports can be added later), and macvlan and MACsec devices as slave or interlink. The rule is by device type, not by the presence of lower devices, because a DSA user port is an upper of its conduit and can offload HSR. VLAN devices are already refused. A tunnel device whose route leads back through the HSR master, or a software device without an identifying flag such as batman-adv, is not covered. Also refuse, before any state is changed, a device whose RX handler is in use or not supported (IFF_NO_RX_HANDLER: ipvlan, VRF), with an extack message and the same error codes. Some of them, such as a macvlan lower, ipvlan or VRF, used to fail only in netdev_rx_handler_register(), after the previous patch had dropped their GRO request; a refused device now keeps its state. A bridge can no longer be used directly as the interlink; connect it through a veth pair. Reported-by: syzbot+fbf74291c3b7e753b481@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=fbf74291c3b7e753b481 Fixes: 06afd2c31d33 ("hsr: Synchronize sending frames to have always incremented outgoing seq nr.") Fixes: 430d67bdcb04 ("net: hsr: Use the seqnr lock for frames received via interlink port.") Signed-off-by: Xin Xie --- net/hsr/hsr_slave.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/net/hsr/hsr_slave.c b/net/hsr/hsr_slave.c index bc340ae0b52e..26f16d98e479 100644 --- a/net/hsr/hsr_slave.c +++ b/net/hsr/hsr_slave.c @@ -120,6 +120,22 @@ static int hsr_check_dev_ok(struct net_device *dev, return -EINVAL; } + /* The RX handler is taken by devices such as bridge/bond/team + * ports, macvlan and ipvlan lowers and HSR ports, or unsupported + * (IFF_NO_RX_HANDLER). Refuse before any state change, so a + * failed attach leaves the device as it was. + */ + if (dev->priv_flags & IFF_NO_RX_HANDLER) { + NL_SET_ERR_MSG_MOD(extack, + "This device does not support an RX handler."); + return -EINVAL; + } + if (netdev_is_rx_handler_busy(dev)) { + NL_SET_ERR_MSG_MOD(extack, + "RX handler busy: device is already a lower of another device."); + return -EBUSY; + } + if (is_vlan_dev(dev)) { NL_SET_ERR_MSG_MOD(extack, "HSR on top of VLAN is not yet supported in this driver."); return -EINVAL; @@ -131,9 +147,19 @@ static int hsr_check_dev_ok(struct net_device *dev, return -EOPNOTSUPP; } - /* HSR over bonded devices has not been tested, but I'm not sure it - * won't work... + /* Forwarding devices feed HSR frames into another device's + * transmit path. A bridge, bond, team or OVS master or a macvlan + * or MACsec device makes no sense as a ring or LAN port and can + * nest seqnr_lock through a second HSR device. Refuse them by + * type: devices with lower devices in general stay valid, DSA + * user ports are uppers of their conduit. */ + if (netif_is_any_bridge_master(dev) || netif_is_lag_master(dev) || + netif_is_macvlan(dev) || netif_is_macsec(dev)) { + NL_SET_ERR_MSG_MOD(extack, + "Cannot use a bridge, bond, team, OVS, macvlan or MACsec device as HSR port."); + return -EINVAL; + } return 0; } -- 2.53.0