From nobody Sat Feb 7 22:21:21 2026 Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) (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 E841A31283B for ; Wed, 7 Jan 2026 15:49:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767800962; cv=none; b=M81VdziinQLvEEbYlV82dNuDdna6JeXF+8BSwdoBFgr3fu6OxJ2bLTi0B3sfy1+ffL1ON4eGwvVes88fxZCQEBesO3B+00BZVpx4O1HKQhhIVftX3VovW6m1Xu0SV7r/33QedbRU48Z/q3kC5iuMnGQlsq0iJk3It08PHiJkmGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767800962; c=relaxed/simple; bh=xfSrakQwoJOBZFd/XcvXn+e/Jw5ZTdDUH7AF/MH7D3g=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=W6Re62e+d7Y2ylVXTxVgbUmxeW6R6AILCJAwxwRRdCj57LlUxt7IETz9f/8ANeLft7YKEWPN0eDhisUoH68moqMVaHINqqBaMqrGIgPYjh7G6t0OmPDVKXudhNkW9ntqumw8sSXDR2/ryagDE0ylZvBpj2f0lkRbNofnTZQp9/I= 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=Q14H1tDo; arc=none smtp.client-ip=209.85.216.47 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="Q14H1tDo" Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-34c565b888dso1973262a91.0 for ; Wed, 07 Jan 2026 07:49:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767800960; x=1768405760; 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=7FSeuBULzdzaTu2OobnFBsJJQpvGnp838FJj4KUxAZA=; b=Q14H1tDoZvPgYNdbs85+p+S/anGDn58k47mqgcEN29YxszoO5yZhSiVfx1HjEG7WBG QsAAU44ZpvvsLgCpiYTEp4k3FTUcLxyefwZxwkOfknmTJ9+GDqLcseyqXuUHwMkbKtFo aGCabLoUXn4+ybF6q71zefmfakrJvL70UfZ+SDq+HXJA1PsSVzcBR/Fj0ls6N4OSQ/4g 91IF4etW0ykX6OuIXDDdy9JEuWR8MBg8PpejaMjeZQSioJAhiIBLpt7uSXw4fyN2ZS+6 UKYhak4wc16hfK88LjYApjpYnNwaz/z3ln5VJFIExG1rxn1QVhxrgTDBEGa4YSQKNmiL MuTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767800960; x=1768405760; 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=7FSeuBULzdzaTu2OobnFBsJJQpvGnp838FJj4KUxAZA=; b=tMS1yR8d8YQdNZyWvYavPC1hIiOwtCmpj264LWeISXFg5Pwi9aFZd5pWo2QIL1pII3 37ltT/KQW4wJve3BTid3Jlpyb5IhoU6LBl50wl8nXfdogmwA62KLSYfiK025wLtlSemV oE520muXGv4H4xaTCUy4ZxLIzvAFVXDTW0maYqRdEzBBCTscosL8w4fHkPznbIHyC1Pc qzFoE6w4qoIHcGRm01uJWJsa07OnrEgxWPqqnw/sYoPFys5lAZ+EbMDLYhn09sZMWm1Y Zjux7n2XHXy+OIeRfkbKPnyWAfNM8Ip5Wq4a2Si6c3cTUx/j+co+c5fuWQ5zVGjuQHhc UO6A== X-Gm-Message-State: AOJu0Ywmil2zKuSfEEkAjzb7X88mkmIJDUVWcqeRveCbwpF+laqhWvps wa2n1ItIgBijVZYIeYP1eWOQyoET1Aawtch92AZ5NLlA1ayt3oQVwSI= X-Gm-Gg: AY/fxX73h+ndoV1+kf3dgzFFiY9fk/nIQaFzk8NgFsO/T6CpBQv7RdLR/ifyeMILWbp xDVwKKlbaaXfPM2Y/Sxs7017Jj3TRsnbU309F7l8/kWUB0mV+hoRG9EelQ6ck4y2WH8SCKPZKoR E2mE4YXEe88LM+c/Y3mrblvfiTYoQePuzMqdGMjL6C38ZdG/vdTmKZRxuZ94BjrekNu8fDQoI6C f/IXLaqoEFtcswifSz4dnT4Wc8lEehVpLLhztLadhKk5EkU3BBhoEBBzieEI6KcZ3YoHO3evb5e o9S+RCMXOALGeUHx8DE1UqEkZndglqHfsvrQ4oLWDwqYM/Qi39cIrD9m1CQCf/2FwN7OVWDsYdO JPIyNMxJbS4RQvOwNDAnSyW7DVA1k86eIrGHoYeR3lBrGcc7QdGA3SyIw7xsTtd3WvWF86Jv8RN QEZ8vp4ojnokA85qYwxnPCiVrBtKf+fEm3G4K+StCGXl9FFey3gn8M8LD0t3NOh7krh5gN2WjqN Pq4t3uy X-Google-Smtp-Source: AGHT+IFPhEd93u+i5zJWQNEc1oW7b5IiubaxmS38PoEN8PpnI+HdQKRscJLasD2UUdnNOBCpbWgpqg== X-Received: by 2002:a17:90b:4c46:b0:34c:f92a:ad05 with SMTP id 98e67ed59e1d1-34f68b9a0ffmr2787558a91.11.1767800960047; Wed, 07 Jan 2026 07:49:20 -0800 (PST) Received: from DESKTOP-BKIPFGN (ec2-54-169-177-146.ap-southeast-1.compute.amazonaws.com. [54.169.177.146]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-819c5301cadsm5348119b3a.40.2026.01.07.07.49.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 07:49:19 -0800 (PST) From: Kery Qi To: broonie@kernel.org Cc: linux-kernel@vger.kernel.org, Kery Qi Subject: [PATCH] ASoC: davinci-evm: Fix reference leak in davinci_evm_probe Date: Wed, 7 Jan 2026 23:48:37 +0800 Message-ID: <20260107154836.1521-2-qikeyu2017@gmail.com> X-Mailer: git-send-email 2.50.1.windows.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" The davinci_evm_probe() function calls of_parse_phandle() to acquire device nodes for "ti,audio-codec" and "ti,mcasp-controller". These functions return device nodes with incremented reference counts. However, in several error paths (e.g., when the second of_parse_phandle(), snd_soc_of_parse_card_name(), or devm_snd_soc_register_card() fails), the function returns directly without releasing the acquired nodes, leading to reference leaks. This patch adds an error handling path 'err_put' to properly release the device nodes using of_node_put() and clean up the pointers when an error occurs. Signed-off-by: Kery Qi --- sound/soc/ti/davinci-evm.c | 39 ++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/sound/soc/ti/davinci-evm.c b/sound/soc/ti/davinci-evm.c index 3848766d96c3..ad514c2e5a25 100644 --- a/sound/soc/ti/davinci-evm.c +++ b/sound/soc/ti/davinci-evm.c @@ -194,27 +194,32 @@ static int davinci_evm_probe(struct platform_device *= pdev) return -EINVAL; =20 dai->cpus->of_node =3D of_parse_phandle(np, "ti,mcasp-controller", 0); - if (!dai->cpus->of_node) - return -EINVAL; + if (!dai->cpus->of_node) { + ret =3D -EINVAL; + goto err_put; + } =20 dai->platforms->of_node =3D dai->cpus->of_node; =20 evm_soc_card.dev =3D &pdev->dev; ret =3D snd_soc_of_parse_card_name(&evm_soc_card, "ti,model"); if (ret) - return ret; + goto err_put; =20 mclk =3D devm_clk_get(&pdev->dev, "mclk"); if (PTR_ERR(mclk) =3D=3D -EPROBE_DEFER) { - return -EPROBE_DEFER; + ret =3D -EPROBE_DEFER; + goto err_put; } else if (IS_ERR(mclk)) { dev_dbg(&pdev->dev, "mclk not found.\n"); mclk =3D NULL; } =20 drvdata =3D devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) - return -ENOMEM; + if (!drvdata) { + ret =3D -ENOMEM; + goto err_put; + } =20 drvdata->mclk =3D mclk; =20 @@ -224,7 +229,8 @@ static int davinci_evm_probe(struct platform_device *pd= ev) if (!drvdata->mclk) { dev_err(&pdev->dev, "No clock or clock rate defined.\n"); - return -EINVAL; + ret =3D -EINVAL; + goto err_put; } drvdata->sysclk =3D clk_get_rate(drvdata->mclk); } else if (drvdata->mclk) { @@ -240,8 +246,25 @@ static int davinci_evm_probe(struct platform_device *p= dev) snd_soc_card_set_drvdata(&evm_soc_card, drvdata); ret =3D devm_snd_soc_register_card(&pdev->dev, &evm_soc_card); =20 - if (ret) + if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret); + goto err_put; + } + + return ret; + +err_put: + dai->platforms->of_node =3D NULL; + + if (dai->cpus->of_node) { + of_node_put(dai->cpus->of_node); + dai->cpus->of_node =3D NULL; + } + + if (dai->codecs->of_node) { + of_node_put(dai->codecs->of_node); + dai->codecs->of_node =3D NULL; + } =20 return ret; } --=20 2.34.1