From nobody Mon Jun 8 04:25:57 2026 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (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 12AE130E838 for ; Sun, 7 Jun 2026 19:37:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780861057; cv=none; b=DyJzZ4HK9BvTDNenEqg+S0iTmZx1+2bM0k2m9fnVyRsCEYRLSeJYhJZggWWpr1UILXYNJ8i2U2uc+gHdNjFvN+w8IEJ/FdDNccCWQyOrJdvD6Sd0GFU0qgiytOKGENa8kmAPdBiZlStaTagocGlW6zrwRofcuYM/WDSe1Ea38S4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780861057; c=relaxed/simple; bh=TzvQakJ1S+Nsey6Vt7ynoW4v8ZmbADwjeVvQIRX45Uw=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=nCh2AgtziFQz1wmPGQyNyoDXBsfQgkD/qrdYlpjaf9bKVWZqRubj1ofqqnJKYGUZ1NeJ7Oqtkl/gIs5zboKYDwjlPdAM/tfTXZMS3K3cJfFlQb6OrF0f5jo0etx54Jva3sUQdg6A1NiiBIus+gLXUnFaE+1M0v7EOjl2SivLCwY= 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=PV0yGyrp; arc=none smtp.client-ip=209.85.210.182 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="PV0yGyrp" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-8422871b42dso2133328b3a.3 for ; Sun, 07 Jun 2026 12:37:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780861054; x=1781465854; 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; bh=kewoD/JaIrVG2iWe454sEs6y3jw5rtHEnURmpvnmVNo=; b=PV0yGyrpIRRgZpF/C70DQA8rz8caUKzHVIpLeIMhltfxKUTlICTRqp5JwcfHc15Z31 EkBaGji9UUXohJyMn+OmOb2jPhuhrgE30xbq5uBM8h641M1UmYz9RqtyaKJIPgOyn+XV vpBZgd3AUQltCeKsAUVoXELlRbP0Qm6hvAXbwvGodUuj7qlZT7WldqAC3rzCJTmGPmOA vEL3lrlCmRIdxs1Q+VHpzzSIyQzEuQK4piJu40kELE0hrd/mXskPIyIXpycX5TG0gLA5 V06IauUZBcIj5HDeSvl47JXz4UpcVvd9IaFNqYvPnzVYgmeYiFE2T1DTBu2D6IGLhF+3 3sxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780861054; x=1781465854; 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; bh=kewoD/JaIrVG2iWe454sEs6y3jw5rtHEnURmpvnmVNo=; b=Hyy+IIthoPNnsyTC+MmYVR4l8nWGxxPNb1Dbcy3NcsGYddXEIVs3A6cH92f8rw1eN6 qcpSn2XP/KnszWTPCItj33VotiB/JkORCq+lyq48Ja1cjV44MIpP/aR1oCCJwaXDq8Up efewZk3Gojq27Fsppxswdqdt3uRb9Spc3vo89f1tNUSks09mf5HR/hQ39Tl9/vAARLDi 6Db9l2OLQ0U+cSCxFnmQaDcx6aX/C2/ugOtTdpZwlJzNoHwpfb/Vg38arTNI4UQS/4mH 9j333mpvOcRRsKYyj8uTC7hsbXVZy2iwdY/i5MKW00hE/NDYQEa957lMnR8w20tKE+Yl VBEg== X-Forwarded-Encrypted: i=1; AFNElJ862mNPQgGZxsBrBZuXcwKOKbZhHzA9nxEU450Yv3WECt4OMcv9ml0ex4Ox8N1r6npijxNsD/KSiTCqiWc=@vger.kernel.org X-Gm-Message-State: AOJu0YymjfSMcy9i7x6f9TFQPLYBrr0nYU8j7LThjE+Gzx00zRrWQBFa LWCceOIw/qpaMg+AOP6GHo9OZut2BiwrIIL9idIkzzAgQVvRtZoJPoKH X-Gm-Gg: Acq92OHXMhGJJt/cE/LVsP4JG1fWKTLL+ESHtNZjvU99nShnUD96UUtUo+/0pZ+C03o Dc1XdWvisbCWlRYp9DbJRoA+k753vIy8WYbTWzp69LuaUYMECm9n+QDL7nRgWGeeGTh7ud0/5nz h7H6og1+E+79wLcUlbQu0pbNnoxgapO34hUeNwP1XSc9kYGQ7VkVfXGhcD0SrntfM/FgBywnaZU y+WBncP4Cn0LEGMXluTY4MF6ZPRoaMkoig1EKjyz0RfQJkz68E2Ulqybn2ZAP25/x3qtnRVQ8jN jGpJSRYDWIPx29q+ffSFRFxJJNUAA7c0hp3N6K7UjvapjhhgY8HsP5/J9CdhpwQofSVgZ12VJnf j+kt/jdYvqH5Qm9d+lLb42UTccI1PB3i4631GyGolAgj8gDd9nzj/n+/efpa8KKXLvzxB1BFjOD FWI/j6lLX1kiqgP637WUzw7dH59bE8rIFBSjA9I5Z2lsX0yRQIOLT/8jUV2bnr+2CTeMQU3sWI X-Received: by 2002:a05:6a00:1da3:b0:82f:3a1e:5618 with SMTP id d2e1a72fcca58-842b0dafd4bmr12422704b3a.22.1780861054230; Sun, 07 Jun 2026 12:37:34 -0700 (PDT) Received: from localhost.localdomain ([115.110.225.242]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-842828821d0sm15429233b3a.28.2026.06.07.12.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 07 Jun 2026 12:37:33 -0700 (PDT) From: Shitalkumar Gandhi X-Google-Original-From: Shitalkumar Gandhi To: Wells Lu Cc: Andrew Lunn , Jakub Kicinski , "David S. Miller" , Eric Dumazet , Paolo Abeni , Simon Horman , stable@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Shitalkumar Gandhi Subject: [PATCH net] net: ethernet: sunplus: spl2sw: fix multiple of_node refcount leaks in probe Date: Mon, 8 Jun 2026 01:07:11 +0530 Message-Id: <20260607193711.601544-1-shitalkumar.gandhi@cambiumnetworks.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" spl2sw_probe() acquires three of_node references that are never properly released in all paths: - eth_ports_np from of_get_child_by_name() leaks on every probe. - port_np returned from spl2sw_get_eth_child_node() (which exits a for_each_child_of_node() loop mid-iteration) leaks per loop pass. - phy_np from of_parse_phandle() leaks on the -EPROBE_DEFER and spl2sw_init_netdev() failure goto paths, and the registered netdev's mac->phy_node is not released on the out_unregister_dev cleanup path. Convert eth_ports_np and port_np to scoped __free(device_node), add explicit of_node_put(phy_np) on the two early-error gotos where ownership has not yet been transferred to mac->phy_node, and release each registered ndev's mac->phy_node in the out_unregister_dev loop before unregister_netdev(). The mac->phy_node release in the normal driver-remove path is handled by the preceding fix to spl2sw_phy_remove(). Fixes: fd3040b9394c ("net: ethernet: Add driver for Sunplus SP7021") Cc: stable@vger.kernel.org Signed-off-by: Shitalkumar Gandhi --- drivers/net/ethernet/sunplus/spl2sw_driver.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/sunplus/spl2sw_driver.c b/drivers/net/eth= ernet/sunplus/spl2sw_driver.c index 5e0e4c9ecbb0..d78bda050ee4 100644 --- a/drivers/net/ethernet/sunplus/spl2sw_driver.c +++ b/drivers/net/ethernet/sunplus/spl2sw_driver.c @@ -319,10 +319,8 @@ static struct device_node *spl2sw_get_eth_child_node(s= truct device_node *ether_n =20 static int spl2sw_probe(struct platform_device *pdev) { - struct device_node *eth_ports_np; - struct device_node *port_np; + struct device_node *eth_ports_np __free(device_node) =3D NULL; struct spl2sw_common *comm; - struct device_node *phy_np; phy_interface_t phy_mode; struct net_device *ndev; struct spl2sw_mac *mac; @@ -418,8 +416,10 @@ static int spl2sw_probe(struct platform_device *pdev) } =20 for (i =3D 0; i < MAX_NETDEV_NUM; i++) { - /* Get port@i of node ethernet-ports. */ - port_np =3D spl2sw_get_eth_child_node(eth_ports_np, i); + struct device_node *port_np __free(device_node) =3D + spl2sw_get_eth_child_node(eth_ports_np, i); + struct device_node *phy_np; + if (!port_np) continue; =20 @@ -441,6 +441,7 @@ static int spl2sw_probe(struct platform_device *pdev) /* Get mac-address from nvmem. */ ret =3D spl2sw_nvmem_get_mac_address(&pdev->dev, port_np, mac_addr); if (ret =3D=3D -EPROBE_DEFER) { + of_node_put(phy_np); goto out_unregister_dev; } else if (ret) { dev_info(&pdev->dev, "Generate a random mac address!\n"); @@ -449,8 +450,10 @@ static int spl2sw_probe(struct platform_device *pdev) =20 /* Initialize the net device. */ ret =3D spl2sw_init_netdev(pdev, mac_addr, &ndev); - if (ret) + if (ret) { + of_node_put(phy_np); goto out_unregister_dev; + } =20 ndev->irq =3D irq; comm->ndev[i] =3D ndev; @@ -500,8 +503,11 @@ static int spl2sw_probe(struct platform_device *pdev) =20 out_unregister_dev: for (i =3D 0; i < MAX_NETDEV_NUM; i++) - if (comm->ndev[i]) + if (comm->ndev[i]) { + mac =3D netdev_priv(comm->ndev[i]); + of_node_put(mac->phy_node); unregister_netdev(comm->ndev[i]); + } =20 out_free_mdio: spl2sw_mdio_remove(comm); --=20 2.25.1