From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1596F26CE05 for ; Sat, 8 Aug 2026 11:08:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786187300; cv=none; b=JD2ZrrkEMZ+oWXUVVnuMCtT24XYazzbTojMUQGcJgLTDXi4t7HNKTiYnPvkBhvqB9tubYjFdRfheuV8yV94moAlMmHl0OcIZ1n3T7syows+uvPoBjXrlef/t1eUpwLM9z6Fmv1AaJSiVg4cZTD9SN8FPzQoI4e1oaY/7C+CcgqE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786187300; c=relaxed/simple; bh=3Z0CI0uIceg4PVOuJtw78UW56wWQDdjmHOKgAP2pJFY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=NdoYtRXnAuiUlaSaoxPL6hVL7g9h60Lly8bbb+3uurjO9rlNyBIWnWslulxZvx76gKtJvUXyC4EEv5EvmCVAo5cEQwMxESaYa1ITSSB7W25BC3hR3X1sb3n2eFhbA5O5ZpMoLGn/xuNFYkf2psqU2/7Y66RIWNlEcIZDSnKkmB4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VMYo7IUM; arc=none smtp.client-ip=209.85.221.41 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.b="VMYo7IUM" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-472d9d69e16so26450f8f.0 for ; Sat, 08 Aug 2026 04:08:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786187297; x=1786792097; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=YGC0qs4udldeauBqKI42idTjvtWhQdYIzmlrmGDgBN8=; b=VMYo7IUMORk+DN6y6OG9RqrzF/3750LitQFDHs5hdiFBNWqAMxl4vr0+IofPG9a+Br DP+XUsNz9+8WtnqCY8M6/wecVe1TL09qK+m/9ZPXgGaQqxpMbqCi1I/YWEU+u5JpieID Ys2bhgIYG4RrQl4gmXAbZQg00N+diPmoCBH6c8uhDAm+TiypUAb1FLdZp5eu6zc2JcdX Y3civtHe+cwwXZki4j2SEe5BjJ5ww8HnASHfryLyK05c83LIyaL+qJ8dTTB4oizoQ/Rj hmpRhIvpFhCk7D0oRxgf6l2OYY5GHvhJIMKIM+0p8MRq4kQ7BBAGb072V94SLg85oHTn Xwtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786187297; x=1786792097; h=content-transfer-encoding:mime-version: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=YGC0qs4udldeauBqKI42idTjvtWhQdYIzmlrmGDgBN8=; b=q4bSNfMw8EQk9h+fZROJbJLEFwo2XRhYdB8HG6hK6uhKINSxFc5/uEsnoXVcAD9Ti2 2XMjK5wwMUrRH7yA5QQpb3G2DNbgktwuVyQXKLB7iqBBAN8BHcR0OX61zYUTT8AlNmL0 JZYCL7QeVeLjO78SDR+MfyW2k4IHyfcVzOs0/D5umMN7gaHbeKaV+0/cwt1fHKLYgw1B CE6tsb93vrRUqWjd/FBM+WENhFbHWkBCRLqaehXxLDSy0DFdYXX2CdZBgYgfupjj9op3 oTG2FdTL3nHdRXfuagWqLv+INX19SBGx9g2eKtc7fhPNZTGrwbY67L8yy0FIegesqior 3Gpw== X-Forwarded-Encrypted: i=1; AHgh+RquMCDAZUccTvef4KXvIZv10dds8D45Ot3pZ6pRJ0itskJyWIdXlYRuPCJPycUAXOgfxqFb6ihF6xdBOyk=@vger.kernel.org X-Gm-Message-State: AOJu0YwexV2ps95FUZ4EoyjahwcYA3M2y59dbkev6D5Jp8W293ixQz/i UOWlSCVQI5QyJ+RuI1A4mQ+MLgxLXb5JPPbS7vVISoW671k9i6vrlIRt X-Gm-Gg: AR+sD101HZQ1641h8yjgKP86XgaGvIm4jsbwRjkJ7I+rdYmfKraxezkKQenOjYmSrbl pdfPC8NFTVuX3yn36xJ0E2xw2osNuprg0RibJ/RHZ3349WApjamnU9+d06OkGxOwKpyL9nEZmNv hb4RX35Yz7O27iMCtMSjmTStXbjcl74clEpVbd0se65qDmVPR1afBv0Qchqi05zkMaRO1FNl9ZW WjpIoieOdG6ybyA3M+ogb6I6jMgQrJD1zSZCRyCNKbQvpRDjE9j1vtaIswLxpq94QAaWwvPQyzS 7UemPofNUzZj1LYP6Aw0ru6uSXnbeZyjL/C8+fX9BcDe8UuN7T+h3SkY+n+BwqenwFDtNVqa4O1 m3QPb2cB74esRufj6+DrmLOS2zZs1Vh0CZt0Tb3gdUoVu5ZM2S4/vuJtp/BKGfWzfyMFc5Jiunj nwkUtjGSD2xERwceXuHLPmimkjiV4yc3CoNRsa3aPLatRc2US0M6z7TBAbAvB7CjoFFGW7bMUGO 2yLPwNCm/QboZy08B0G2shIcvYTXehL8yyD6rzIRMn74P9/ZJdZ9rqGn+yuH4WREF/gb0ka9Efb r2ZqRen0xi9tr7E2dorcOg== X-Received: by 2002:a05:600c:c8c:b0:495:7561:a9cc with SMTP id 5b1f17b1804b1-4994e7d5c76mr193087175e9.4.1786187297100; Sat, 08 Aug 2026 04:08:17 -0700 (PDT) Received: from L-022584.energy.envision.com (dynamic-077-179-031-173.77.179.pool.telefonica.de. [77.179.31.173]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4800220727bsm14964232f8f.33.2026.08.08.04.08.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Aug 2026 04:08:16 -0700 (PDT) From: Xin Xie To: netdev@vger.kernel.org Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, liuhangbin@gmail.com, fmaurer@redhat.com, luka.gejak@linux.dev, kexinsun@smail.nju.edu.cn, arvid.brodin@alten.se, linux-kernel@vger.kernel.org, Xin Xie Subject: [PATCH net] net: hsr: free learned nodes on device setup failure Date: Sat, 8 Aug 2026 13:08:14 +0200 Message-ID: <20260808110814.1637-1-xiexinet@gmail.com> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit hsr_dev_finalize() can fail after a lower-device RX handler has already been registered (slave A is added before the failable slave B and interlink adds). RX handlers run in softirq regardless of the master's state, so frames received in that window can learn dynamic nodes into node_db, and the error unwind never releases them. Free both owned dynamic databases in the unwind, mirroring hsr_dellink(). proxy_node_db is provably empty on every current error exit (only interlink RX feeds it, and the interlink add is the last failable step) and is freed for symmetry. The order is safe: hsr_del_port() unregisters each RX handler with synchronize_net() before hsr_del_nodes() runs, which removes remaining entries with list_del_rcu() and defers their release with call_rcu() for readers already under RCU. Fixes: 81ba6afd6e64 ("net/hsr: Switch from dev_add_pack() to netdev_rx_handler_register()") Signed-off-by: Xin Xie --- net/hsr/hsr_device.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c index 5555b71ab19b..9c3078dd38c2 100644 --- a/net/hsr/hsr_device.c +++ b/net/hsr/hsr_device.c @@ -820,6 +820,8 @@ int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2], hsr_del_ports(hsr); err_add_master: hsr_del_self_node(hsr); + hsr_del_nodes(&hsr->node_db); + hsr_del_nodes(&hsr->proxy_node_db); if (unregister) unregister_netdevice(hsr_dev); -- 2.43.0