From patchwork Tue Feb 16 08:02:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: angkery X-Patchwork-Id: 1440857 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=23.128.96.18; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256 header.s=s110527 header.b=Bl3u5Hiv; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by ozlabs.org (Postfix) with ESMTP id 4DfwsB4JdWz9sVF for ; Tue, 16 Feb 2021 20:38:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229996AbhBPJig (ORCPT ); Tue, 16 Feb 2021 04:38:36 -0500 Received: from m12-11.163.com ([220.181.12.11]:49881 "EHLO m12-11.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229806AbhBPJie (ORCPT ); Tue, 16 Feb 2021 04:38:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=2dWxA W+RTjRWRqri4fiH/+uWnTVM2BT821JbkpPbVGk=; b=Bl3u5HivPuwSFU7OrTAfN cAQivAcRy43qelN/o1xDRLlu72jhfr7X3IAyz+qL95Bg+OxAdwsvRoHrBUkItzfh MVUcQEWZiixJx0he6Y7jJY2wZdMLcRoySNx72DrD2nIUzjWXM2XN8K7wIlrFjQ/o C5mYDgsnGS3EJO1N+vOf58= Received: from yangjunlin.ccdomain.com (unknown [218.17.89.92]) by smtp7 (Coremail) with SMTP id C8CowAAnHJQcfCtgPNS3Nw--.40902S2; Tue, 16 Feb 2021 16:02:37 +0800 (CST) From: angkery To: linus.walleij@linaro.org Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Junlin Yang Subject: [PATCH] pinctrl: equilibrium: add missing of_node_put Date: Tue, 16 Feb 2021 16:02:31 +0800 Message-Id: <20210216080231.1303-1-angkery@163.com> X-Mailer: git-send-email 2.24.0.windows.2 MIME-Version: 1.0 X-CM-TRANSID: C8CowAAnHJQcfCtgPNS3Nw--.40902S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7WF1fWrWDAw4kur15tr17Awb_yoW8Kr47pF ZxCFy5JryUJFs7Wa4Iy34qvFWrKan7Kayjv3y2gan7ZFsxJw1UJa1YqFyjqas5CF1rZ345 JFyYvay29r4UGr7anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jLzVbUUUUU= X-Originating-IP: [218.17.89.92] X-CM-SenderInfo: 5dqjyvlu16il2tof0z/xtbBRh07I13l+nXtIwAAs6 Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org From: Junlin Yang Fix OF node leaks by calling of_node_put in for_each_child_of_node when the cycle returns. Generated by: scripts/coccinelle/iterators/for_each_child.cocci Signed-off-by: Junlin Yang --- drivers/pinctrl/pinctrl-equilibrium.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/pinctrl/pinctrl-equilibrium.c b/drivers/pinctrl/pinctrl-equilibrium.c index 067271b..a194d80 100644 --- a/drivers/pinctrl/pinctrl-equilibrium.c +++ b/drivers/pinctrl/pinctrl-equilibrium.c @@ -628,7 +628,8 @@ static int funcs_utils(struct device *dev, struct eqbr_pmx_func *funcs, break; default: - return -EINVAL; + of_node_put(np); + return -EINVAL; } i++; } @@ -707,34 +708,42 @@ static int eqbr_build_groups(struct eqbr_pinctrl_drv_data *drvdata) group.num_pins = of_property_count_u32_elems(np, "pins"); if (group.num_pins < 0) { dev_err(dev, "No pins in the group: %s\n", prop->name); + of_node_put(np); return -EINVAL; } group.name = prop->value; group.pins = devm_kcalloc(dev, group.num_pins, sizeof(*(group.pins)), GFP_KERNEL); - if (!group.pins) + if (!group.pins) { + of_node_put(np); return -ENOMEM; + } pinmux = devm_kcalloc(dev, group.num_pins, sizeof(*pinmux), GFP_KERNEL); - if (!pinmux) + if (!pinmux) { + of_node_put(np); return -ENOMEM; + } for (j = 0; j < group.num_pins; j++) { if (of_property_read_u32_index(np, "pins", j, &pin_id)) { dev_err(dev, "Group %s: Read intel pins id failed\n", group.name); + of_node_put(np); return -EINVAL; } if (pin_id >= drvdata->pctl_desc.npins) { dev_err(dev, "Group %s: Invalid pin ID, idx: %d, pin %u\n", group.name, j, pin_id); + of_node_put(np); return -EINVAL; } group.pins[j] = pin_id; if (of_property_read_u32_index(np, "pinmux", j, &pinmux_id)) { dev_err(dev, "Group %s: Read intel pinmux id failed\n", group.name); + of_node_put(np); return -EINVAL; } pinmux[j] = pinmux_id; @@ -745,6 +754,7 @@ static int eqbr_build_groups(struct eqbr_pinctrl_drv_data *drvdata) pinmux); if (err < 0) { dev_err(dev, "Failed to register group %s\n", group.name); + of_node_put(np); return err; } memset(&group, 0, sizeof(group));