Received: by 2002:ac8:4f8f:0:b0:429:955e:b7c6 with SMTP id j15csp5652qtw; Tue, 16 Jan 2024 13:02:53 -0800 (PST) X-Google-Smtp-Source: AGHT+IF+KDrK413COgYyJXFzEwG+9KU1LhbJ98e4G/gYVyDfRzWdTFJWq123rgofSt+kqGizEwtI X-Received: by 2002:a05:6359:b87:b0:175:f65c:45c8 with SMTP id gf7-20020a0563590b8700b00175f65c45c8mr2036533rwb.61.1705438973310; Tue, 16 Jan 2024 13:02:53 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1705438973; cv=pass; d=google.com; s=arc-20160816; b=mJDj2EdLobJdTuveMPEG5xBcx/ulNaIa0CbX69w7vavkwbBa4PG7pyI+gGiWfSI0fR GIhLs8isEihPifx8bJCw4qIoAGdk6dmEOVtR7dZt73J3IHgdFmSF2NOGRvhOltdY3oQL KUrMTyUdb6wC9j4WeEZKJgQM2iJ3DzkJiVXpu6irh0iNmGWFDqLyAWg7pM9QTt88NeJ+ YwqYgAtwAK3w/CXP/b3+gupEbI/bzAKXQO9ElQAq6ATDuEzlGmgn+YdyXUBYCyJcIlNV vt+z7+W0MKdD60vexQEnbxW+X4TPypGuKq+n8yf5bgmBjLWNOSppg+0kVS22UhpeLEAE F60g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=N1WxihKxLkb7jTqOfPMHh9K5lo+Oj67OKjqnQ7u9X7A=; fh=J4DQ9gmKTlZILjEKsMQi+ivCZhtlUWxu8wx0ijcxzX4=; b=IRA7XpblvPgsA5dlmAmdoGCvt8HCUNUscoFvC520T0krDhRawMCfk4akcTp7rEdUJO KAlocBUFbIOE+chLV+K1jsRvqOeSM2HELzo+MHjtm3RS5R4t3/B6pWburPdI5sLa9tin /x4XUsEcKR8RGM83J4wtmKB4O7wRO2l0vyS9L8KrO37sY/wMDF+p/Ze+3YaJfbr2aQDV VAwQV8ro6mq6grJGtZLtushJaOa8/KRbBo+EKxGSg67MmGHD5qvn+VGrr9sPZCE57pOC +MUpCgnYU1YWYN2qdfmz5StadDW91SN1I2hrXaoYu9vMd+Ei4eljGH4jQR8iVc7+acSf xbwA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QYHgL7jV; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-28016-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28016-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id u2-20020a655c02000000b005ceb4a6f5d6si11383820pgr.298.2024.01.16.13.02.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jan 2024 13:02:53 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-28016-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=QYHgL7jV; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-28016-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-28016-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 20AD8288830 for ; Tue, 16 Jan 2024 21:00:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8778628E38; Tue, 16 Jan 2024 19:54:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QYHgL7jV" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 A9BCD13F008; Tue, 16 Jan 2024 19:54:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705434845; cv=none; b=c84qmiVaQ4aNx1ZcGBCx9Sa/IsOg80G4gwmtX10wj+zPnZsn2+jdxLLpdMQoEXbXkQMoKgAJJZxqfl9ieIY+3NWFLQa89utQt4+QxyrrrYSESi/qFJmkSvN/hja+Pc+KP3IjS3Q43lJy2XzQqjDBru9GwrHnv9eqDb25SPVxoUQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705434845; c=relaxed/simple; bh=BKifvPs38kQSJmM19rkP5nq0Pl5r7C4sjUM/Citd3M4=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID: X-Mailer:In-Reply-To:References:MIME-Version:Content-Type:X-stable: X-Patchwork-Hint:X-stable-base:Content-Transfer-Encoding; b=iCF4COXL6pAxo4v0vOOtxSWM3gO39ehCp7i7DahQUZyQP/15WlXyrDnbna2q9AW7XE/EM+tlII4FW2/479uZwaRmC2EC0QBKlkc9BwkZnQaPJCLW7ZnZU62X1GjyZOxYeHa1lGvMu96RsfvDbBv1t8e/pAAJQ+pQAsG4X249KEQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QYHgL7jV; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4D775C43390; Tue, 16 Jan 2024 19:54:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705434845; bh=BKifvPs38kQSJmM19rkP5nq0Pl5r7C4sjUM/Citd3M4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QYHgL7jVbLJY1Bxd/Hg6m2RaurhLGXGbya1vIdVoMkgg6Bt0PiiPWSnpoIRszmNSf z5+DP7rfzyp1wIKdfraqglU9/Vos1FU0/q+LIK7nmreJt2F/3dV25QdJ/Q+PGGhnjo fA6tPdyxNvUl5EG+Gp/Ej8P07GNUzlDkIeLdxJh9llSTFcIog2kL9tSkeFXh0NEuyO tID0mB/fIRy51AKLA2nweAE84yWuZZZky2pTwswjr/aXAfXm9VEoT8v7Mh3nM+Yhux 7jLpU8Brh/N0DnQ1u6AilDZjH8M2ezxNSb5uCTtl6TsKZzw8UdIEuV7vJoNSKsDhL3 KdgUjAcU53KRw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Vladimir Oltean , =?UTF-8?q?Alvin=20=C5=A0ipraga?= , Florian Fainelli , "David S . Miller" , Sasha Levin , andrew@lunn.ch, f.fainelli@gmail.com, olteanv@gmail.com, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ansuelsmth@gmail.com, rmk+kernel@armlinux.org.uk, kabel@kernel.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 6.6 104/104] net: dsa: qca8k: put MDIO bus OF node on qca8k_mdio_register() failure Date: Tue, 16 Jan 2024 14:47:10 -0500 Message-ID: <20240116194908.253437-104-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240116194908.253437-1-sashal@kernel.org> References: <20240116194908.253437-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.6.12 Content-Transfer-Encoding: 8bit From: Vladimir Oltean [ Upstream commit 68e1010cda7967cfca9c8650ee1f4efcae54ab90 ] of_get_child_by_name() gives us an OF node with an elevated refcount, which should be dropped when we're done with it. This is so that, if (of_node_check_flag(node, OF_DYNAMIC)) is true, the node's memory can eventually be freed. There are 2 distinct paths to be considered in qca8k_mdio_register(): - devm_of_mdiobus_register() succeeds: since commit 3b73a7b8ec38 ("net: mdio_bus: add refcounting for fwnodes to mdiobus"), the MDIO core treats this well. - devm_of_mdiobus_register() or anything up to that point fails: it is the duty of the qca8k driver to release the OF node. This change addresses the second case by making sure that the OF node reference is not leaked. The "mdio" node may be NULL, but of_node_put(NULL) is safe. Signed-off-by: Vladimir Oltean Reviewed-by: Alvin Šipraga Reviewed-by: Florian Fainelli Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/dsa/qca/qca8k-8xxx.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/net/dsa/qca/qca8k-8xxx.c b/drivers/net/dsa/qca/qca8k-8xxx.c index 4ce68e655a63..368d53d3b1d6 100644 --- a/drivers/net/dsa/qca/qca8k-8xxx.c +++ b/drivers/net/dsa/qca/qca8k-8xxx.c @@ -949,10 +949,15 @@ qca8k_mdio_register(struct qca8k_priv *priv) struct dsa_switch *ds = priv->ds; struct device_node *mdio; struct mii_bus *bus; + int err; + + mdio = of_get_child_by_name(priv->dev->of_node, "mdio"); bus = devm_mdiobus_alloc(ds->dev); - if (!bus) - return -ENOMEM; + if (!bus) { + err = -ENOMEM; + goto out_put_node; + } bus->priv = (void *)priv; snprintf(bus->id, MII_BUS_ID_SIZE, "qca8k-%d.%d", @@ -962,12 +967,12 @@ qca8k_mdio_register(struct qca8k_priv *priv) ds->slave_mii_bus = bus; /* Check if the devicetree declare the port:phy mapping */ - mdio = of_get_child_by_name(priv->dev->of_node, "mdio"); if (of_device_is_available(mdio)) { bus->name = "qca8k slave mii"; bus->read = qca8k_internal_mdio_read; bus->write = qca8k_internal_mdio_write; - return devm_of_mdiobus_register(priv->dev, bus, mdio); + err = devm_of_mdiobus_register(priv->dev, bus, mdio); + goto out_put_node; } /* If a mapping can't be found the legacy mapping is used, @@ -976,7 +981,13 @@ qca8k_mdio_register(struct qca8k_priv *priv) bus->name = "qca8k-legacy slave mii"; bus->read = qca8k_legacy_mdio_read; bus->write = qca8k_legacy_mdio_write; - return devm_mdiobus_register(priv->dev, bus); + + err = devm_mdiobus_register(priv->dev, bus); + +out_put_node: + of_node_put(mdio); + + return err; } static int -- 2.43.0