From patchwork Tue Mar 25 14:17:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Abramov X-Patchwork-Id: 14029092 X-Patchwork-Delegate: kuba@kernel.org Received: from ksmg01.maxima.ru (ksmg01.mt-integration.ru [81.200.124.38]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 131EF259C8E; Tue, 25 Mar 2025 14:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=81.200.124.38 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742912704; cv=none; b=BHjCisg/XcAt1dPlGiSmBjz7Eje6qHGEenj5NckiEMPr7zD5FPv3uVw/uQyGdpYwRM/CoC14k4mWu14ilsxFeqIZufxOqhMfjILBhIsFyjkyaxgrlabOI4oMCXt+7zIcGeICFCTV+UmLEfPcmyD87vQkortBtmYC+LVOgjSjzPs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742912704; c=relaxed/simple; bh=fOt02q7aI4iR1SBSf8MwhkVxvKQIQh/ojaCpWHTGtHU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tHq5MEQxddTIyZcGn1t1prXj3ZtpxBxg6MT34DtFEzY1u+FyYLZfxEfTY0dQVNlgeMAH+asqlMSrRfWLteqvCQgrBLjgbHGty0wDiVPC4p9FL4AOBiJqQXWXDhBXOlHwn96+aJ5+Gd7Xx8HpqmM/9+BXNNnPFWVIvu3nM865kqc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mt-integration.ru; spf=pass smtp.mailfrom=mt-integration.ru; dkim=pass (2048-bit key) header.d=mt-integration.ru header.i=@mt-integration.ru header.b=AVXQEc8C; arc=none smtp.client-ip=81.200.124.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=mt-integration.ru Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mt-integration.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mt-integration.ru header.i=@mt-integration.ru header.b="AVXQEc8C" Received: from ksmg01.maxima.ru (localhost [127.0.0.1]) by ksmg01.maxima.ru (Postfix) with ESMTP id 65CB4C0018; Tue, 25 Mar 2025 17:18:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 ksmg01.maxima.ru 65CB4C0018 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mt-integration.ru; s=sl; t=1742912319; bh=fKTbCdR8RoY0Azgc4ltS0nUJfMNiLiqqosTYdtUpw/4=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=AVXQEc8CHwNpWH+GqnRD73k5nQ+LyWqC2z6fSUzzkRHA6imMUz/KbE/Usm3mXSOwl s8Bd8tQwLtJzhWLclDKTFv9SCMZV7T7IUU8XApuUZCJbZ+eFbzGqKvfGBgB30J+HX+ RlccVe6rfFQKpvk72Nu9oRCxN5yGeajtmOPruWg0K46ggoENqzSorCJUenqicAy+Eu FslIwH2pnM9Xl3MBFwrS0r3FnnXOVql2LcfxiU0vbQ4uA0uVO9GECwsgyV/5tZ1SW5 FcJi0cuD9cRGyKLJ5Hi5M0ByRbUxWwBb7ucExZaYa59Nm+SCIsM+1prURhmPQIqdVd 3makicSeJdc2Q== Received: from ksmg01.maxima.ru (mail.maxima.ru [81.200.124.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.maxima.ru", Issuer "GlobalSign GCC R3 DV TLS CA 2020" (verified OK)) by ksmg01.maxima.ru (Postfix) with ESMTPS; Tue, 25 Mar 2025 17:18:39 +0300 (MSK) Received: from db126-1-abramov-14-d-mosos.mti-lab.com (172.25.20.118) by mmail-p-exch01.mt.ru (81.200.124.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 25 Mar 2025 17:18:37 +0300 From: Ivan Abramov To: "David S. Miller" CC: Ivan Abramov , Jakub Kicinski , , , Subject: [PATCH net 1/4] ieee802154: Restore initial state on failed device_rename() in cfg802154_switch_netns() Date: Tue, 25 Mar 2025 17:17:20 +0300 Message-ID: <20250325141723.499850-2-i.abramov@mt-integration.ru> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250325141723.499850-1-i.abramov@mt-integration.ru> References: <20250325141723.499850-1-i.abramov@mt-integration.ru> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: mmail-p-exch02.mt.ru (81.200.124.62) To mmail-p-exch01.mt.ru (81.200.124.61) X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Auth: dmarc=none header.from=mt-integration.ru;spf=none smtp.mailfrom=mt-integration.ru;dkim=none X-KSMG-AntiSpam-Envelope-From: i.abramov@mt-integration.ru X-KSMG-AntiSpam-Info: LuaCore: 51 0.3.51 68896fb0083a027476849bf400a331a2d5d94398, {rep_avail}, {Tracking_from_domain_doesnt_match_to}, mt-integration.ru:7.1.1;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;81.200.124.61:7.1.2;ksmg01.maxima.ru:7.1.1;127.0.0.199:7.1.2, FromAlignment: s, ApMailHostAddress: 81.200.124.61 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiSpam-Lua-Profiles: 192091 [Mar 25 2025] X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Version: 6.1.1.11 X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.1.8310, bases: 2025/03/25 08:37:00 #27838357 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: NotDetected X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 7 X-Patchwork-Delegate: kuba@kernel.org Currently, the return value of device_rename() is not checked or acted upon. There is also a pointless WARN_ON() call in case of an allocation failure, since it only leads to useless splats caused by deliberate fault injections. Since it's possible to roll back the changes made before the device_rename() call in case of failure, do it. Found by Linux Verification Center (linuxtesting.org) with Syzkaller. Fixes: 66e5c2672cd1 ("ieee802154: add netns support") Signed-off-by: Ivan Abramov --- net/ieee802154/core.c | 44 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/net/ieee802154/core.c b/net/ieee802154/core.c index 88adb04e4072..f9865eb2c7cf 100644 --- a/net/ieee802154/core.c +++ b/net/ieee802154/core.c @@ -233,31 +233,35 @@ int cfg802154_switch_netns(struct cfg802154_registered_device *rdev, wpan_dev->netdev->netns_local = true; } - if (err) { - /* failed -- clean up to old netns */ - net = wpan_phy_net(&rdev->wpan_phy); - - list_for_each_entry_continue_reverse(wpan_dev, - &rdev->wpan_dev_list, - list) { - if (!wpan_dev->netdev) - continue; - wpan_dev->netdev->netns_local = false; - err = dev_change_net_namespace(wpan_dev->netdev, net, - "wpan%d"); - WARN_ON(err); - wpan_dev->netdev->netns_local = true; - } + if (err) + goto errout; - return err; - } + err = device_rename(&rdev->wpan_phy.dev, dev_name(&rdev->wpan_phy.dev)); - wpan_phy_net_set(&rdev->wpan_phy, net); + if (err) + goto errout; - err = device_rename(&rdev->wpan_phy.dev, dev_name(&rdev->wpan_phy.dev)); - WARN_ON(err); + wpan_phy_net_set(&rdev->wpan_phy, net); return 0; + +errout: + /* failed -- clean up to old netns */ + net = wpan_phy_net(&rdev->wpan_phy); + + list_for_each_entry_continue_reverse(wpan_dev, + &rdev->wpan_dev_list, + list) { + if (!wpan_dev->netdev) + continue; + wpan_dev->netdev->netns_local = false; + err = dev_change_net_namespace(wpan_dev->netdev, net, + "wpan%d"); + WARN_ON(err); + wpan_dev->netdev->netns_local = true; + } + + return err; } void cfg802154_dev_free(struct cfg802154_registered_device *rdev)