From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753615AbcGLLYA (ORCPT ); Tue, 12 Jul 2016 07:24:00 -0400 Received: from m12-15.163.com ([220.181.12.15]:53600 "EHLO m12-15.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751344AbcGLLX7 (ORCPT ); Tue, 12 Jul 2016 07:23:59 -0400 From: weiyj_lk@163.com To: Liam Girdwood , Mark Brown Cc: Wei Yongjun , linux-kernel@vger.kernel.org Subject: [PATCH -next] regulator: act8865: Fix missing of_node_put() in act8865_pdata_from_dt() Date: Tue, 12 Jul 2016 11:23:50 +0000 Message-Id: <1468322630-387-1-git-send-email-weiyj_lk@163.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-CM-TRANSID: D8CowAC3qchG04RXNuLuCw--.35551S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxJF17JryDKF4rXr15XrW5Wrg_yoW8XrW7pF WDZr9rArW0ya4xXrs2kr92ya4Yvr4kJas7A348Gw4ruryUJasrXr1UAFWrAFnYy3s5Gr12 yFWUAF18Ja4DAaDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07jw3kNUUUUU= X-Originating-IP: [180.110.253.144] X-CM-SenderInfo: pzhl5yxbonqiywtou0bp/1tbiMAek1lWBXBo0iwAAso Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wei Yongjun This node pointer is returned by of_get_child_by_name() with refcount incremented in this function. of_node_put() is missing when exitting this function while invalid device type. Fix it by move of_get_child_by_name() code after device type check. Found by Coccinelle. Signed-off-by: Wei Yongjun --- drivers/regulator/act8865-regulator.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/regulator/act8865-regulator.c b/drivers/regulator/act8865-regulator.c index a1cd0d4..7652477 100644 --- a/drivers/regulator/act8865-regulator.c +++ b/drivers/regulator/act8865-regulator.c @@ -395,12 +395,6 @@ static int act8865_pdata_from_dt(struct device *dev, struct act8865_regulator_data *regulator; struct of_regulator_match *matches; - np = of_get_child_by_name(dev->of_node, "regulators"); - if (!np) { - dev_err(dev, "missing 'regulators' subnode in DT\n"); - return -EINVAL; - } - switch (type) { case ACT8600: matches = act8600_matches; @@ -419,6 +413,12 @@ static int act8865_pdata_from_dt(struct device *dev, return -EINVAL; } + np = of_get_child_by_name(dev->of_node, "regulators"); + if (!np) { + dev_err(dev, "missing 'regulators' subnode in DT\n"); + return -EINVAL; + } + matched = of_regulator_match(dev, np, matches, num_matches); of_node_put(np); if (matched <= 0)