From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) (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 87922381B0A for ; Thu, 18 Jun 2026 13:23:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781789020; cv=none; b=SJs64OshpRI8lTtxMH0zKLC95HYBj3UgvHYDsT4cnFAY5Rk+vVygKZjXWsPAA3IUWEe1F3SEAxQKgZCWDCiEhdhvnGW1UqSyQvgfXIBIT3FuTeK21x8Qry5kfgRk7Sb6K8Q/P85Z5wMbBw9V8q4W9IdkH0xeQil7mQZDulFtgzk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781789020; c=relaxed/simple; bh=ck42ImeN2T0SBWkWxSs/M0vDBgzGApus+21ItLVSpy4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Gpwxf74p29WnKbdeafdzbLftmyForB5XMbC+jp/KTf02auUOYnCz+BWj6aTGN5ok3OopTO93sRzcx5IxxXMZKDbNrDcFp4VKWfr55fXqInL7Ir3j/h8wvtKf+vEfG3oHcnWectJ56RhMPn8tw1myCIrk+UleRC4gLnHvaLpJjxY= 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=NG5Qr+w5; arc=none smtp.client-ip=209.85.216.53 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="NG5Qr+w5" Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-36c68964315so442733a91.2 for ; Thu, 18 Jun 2026 06:23:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781789019; x=1782393819; 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=X582EQOqHPHh+m2rMD2xNKYA4rWMoqpD5umxEjVL/sQ=; b=NG5Qr+w5hywcgv3Dic3qqwH3rJcRKEK0xKIm9E6vTKFWo3GBS6hEWQMNmRgX5BUUdS Vt1v88xlCuTYDpkb3rJFQthpQSgJZY4LX4ruyVp72C4hODACxNL2WIiPQRuznUDtzSVG d0/Mvvazve04Kj2TNshjAvYpT6XhCg29kTFnPvn+gmLwBsClDxQ0K22abZlw8br5EQta NY+/mtPGKDY65w7u4hHdil3i7T/afTeF2neK7I8I+Pz1/3gqbdQ4pMWVZn298d6rRJrQ /JNyA81uFGrbC6aU9hlknnMHk/RKWlk6TRwknb0ECkgWmUNeCZ9SSaSMyViOwH9FbrgC JC3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781789019; x=1782393819; 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=X582EQOqHPHh+m2rMD2xNKYA4rWMoqpD5umxEjVL/sQ=; b=X+2oCe+7OzPEZCrZFbr59RVRyEWBMj4e68k3NLsTQX95v1XLGc+MHkK5Cpd4T06QND xPbMFnXttUKMbUrso01VzonHAq6xAyRj6zA0zU7Vgx4CVEBYtHhax5V+hFJS8CQeKzcc a+K7X/+eAEW84fySYbFALmgMi/ndkH40iUffsqgs8/UbYtxjYWWq2shdXyHe4hJkZLWl Zof4ORLeSY6kPS09+O0soNY17hNsPjPNwC51ZmBhMFb4Syz9PNljYPQJrGuTlOytKrJS MbdvHkBeGgOklx87IuJWDK0s5vjcg2LK7yfafzBdMo1MsyeJjEn7U2F5BG06W4V1a2iU ZRvQ== X-Gm-Message-State: AOJu0Yw8P3Jsnsw61XgNKtLWsGuRW3DdD6dvE08j7VxpurcXcelAStIt rIAPq5yJT6JY/t6WiAwRiTg9dNjTjKiZlom6jC3yoc3GV2uxSmsYCWTG X-Gm-Gg: AfdE7ckFIRZCfHG3WsHAnZO7xUqOSYPCMouAkCfRYihsacVh5CvKo8yD+bQ5l7qAVCA EbUn72RUQJqbCfKsYLrg4y0QAGs9tKSLdyKYmjmGZ2QSPGSk+tMtZ45qEHSTwimgC8z4f7WM9yq /i65PSXbAQAfh+1Rh8qjMH+wf6qY4wv9+GmN3701TdElSRc02RFAbVHQXeVve/8HncSkFs8/Hhu Mqj1Pk3h2MfWrX4jSGpHydcqmXBwsXXRfdwGs/8yLJKigE4b89xJ8xztWh91Rq4P5CPTJfA5ilY 90oM+D4TV8AlEaCNJ9Z+feu27kB+qE8v3gof7Dg8X8Gv5M6xnxyIsFd4rQUR5hwSw4oz6drayCS YZRN+5EOF1hWBhOF9bx8n/qb2rlQoxgMSURDKNDzHMfI/E7FTf1F28Nt+YeLxIEWcPMN6VYqBEo MBQMYjd4wZ+hLeMhZ9QMqJ8SyVDCw0aaPFBkK3dVSg/DzowoY01a0= X-Received: by 2002:a17:90b:3a0c:b0:37c:543f:b83 with SMTP id 98e67ed59e1d1-37ce857afd6mr3119718a91.4.1781789018639; Thu, 18 Jun 2026 06:23:38 -0700 (PDT) Received: from steellegend.taila75641.ts.net ([2401:4900:1c19:e45:6f99:fe25:8bbb:3a22]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37c521aa16fsm9455807a91.4.2026.06.18.06.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Jun 2026 06:23:38 -0700 (PDT) From: Uday Khare To: lgirdwood@gmail.com, broonie@kernel.org Cc: linux-kernel@vger.kernel.org, Uday Khare Subject: [PATCH 4/4] regulator: tps6594: Fix device node reference leaks in multiphase loop Date: Thu, 18 Jun 2026 18:53:27 +0530 Message-ID: <20260618132327.11529-1-udaykhare77@gmail.com> X-Mailer: git-send-email 2.54.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In tps6594_regulator_probe(), the multi-phase configuration loop calls of_find_node_by_name() to find buck nodes by name, and of_get_parent() twice to navigate to the PMIC parent node. None of the acquired node references (np, intermediate parent, np_pmic_parent) are ever released via of_node_put(), causing a reference leak on every loop iteration. Additionally, of_find_node_by_name() can return NULL, but the result was immediately passed to of_node_full_name() and of_get_parent() without a NULL check, which could lead to a NULL pointer dereference. Fix this by: - Adding a NULL check for np after of_find_node_by_name() - Storing the intermediate parent node in a local variable np_parent - Calling of_node_put() on np, np_parent and np_pmic_parent at the end of each loop iteration Fixes: f17ccc5deb4d ("regulator: tps6594-regulator: Add driver for TI TPS6594 regulators") Signed-off-by: Uday Khare --- drivers/regulator/tps6594-regulator.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/regulator/tps6594-regulator.c b/drivers/regulator/tps6594-regulator.c index 645e83462c64..31a5218d5510 100644 --- a/drivers/regulator/tps6594-regulator.c +++ b/drivers/regulator/tps6594-regulator.c @@ -669,13 +669,20 @@ static int tps6594_regulator_probe(struct platform_device *pdev) * buck_configured to avoid creating bucks for every buck in multiphase */ for (multi = 0; multi < desc->num_multi_phase_regs; multi++) { + struct device_node *np_parent; + multi_regs = &desc->multi_phase_regs[multi]; np = of_find_node_by_name(tps->dev->of_node, multi_regs->supply_name); - npname = of_node_full_name(np); - np_pmic_parent = of_get_parent(of_get_parent(np)); - if (of_node_cmp(of_node_full_name(np_pmic_parent), tps->dev->of_node->full_name)) + if (!np) continue; - if (strcmp(npname, multi_regs->supply_name) == 0) { + + npname = of_node_full_name(np); + np_parent = of_get_parent(np); + np_pmic_parent = of_get_parent(np_parent); + + if (np_pmic_parent && + !of_node_cmp(of_node_full_name(np_pmic_parent), tps->dev->of_node->full_name) && + strcmp(npname, multi_regs->supply_name) == 0) { switch (multi) { case MULTI_BUCK12: buck_multi[0] = true; @@ -706,6 +713,10 @@ static int tps6594_regulator_probe(struct platform_device *pdev) break; } } + + of_node_put(np_pmic_parent); + of_node_put(np_parent); + of_node_put(np); } reg_irq_nb = desc->num_irq_types * (desc->num_buck_regs + desc->num_ldo_regs); -- 2.54.0