Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp1588385ybv; Thu, 20 Feb 2020 23:50:03 -0800 (PST) X-Google-Smtp-Source: APXvYqwjOnf1MA0zV+FHY7XfTdoqg3/MijNPULHy713RemHCtcMzyoWdkA+6njjceqClVBOQK1GP X-Received: by 2002:aca:b183:: with SMTP id a125mr921805oif.83.1582271403046; Thu, 20 Feb 2020 23:50:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582271403; cv=none; d=google.com; s=arc-20160816; b=RAd9NWF0R3fLKIlNATgrvQT7pvZyro9klkmco0xcNwWZGPrEazehpar6JPFVdw0wkF 6m51c/LMdAjn36WKNb1+hpigsB0Gu3tf842jiMzDQFSLXh6yWUcLNh05jfCsG1zTMzXu hitHileFPhjGGWnX4B4VLLRTkADVUgfXX3XX4I7+nGvroRX/dxAJN7/iRllY92S/HTh8 MF3UnLROs/SiE+76JGqCCUx8srhYUEM+8058AfhQ5ejJT8CE3frjyKgxVpAlz9wb8IZu 6slrIb0C6FZ00RjA4NaJJ4SstglCAL4Qq+ce1YPKG1RnkxkyZlUffskz1D5DZIhlzlzG p+9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=oDC9JnOJouH0aMHkzsXz/nSNWCaWZYXVHokOVPC7Bg4=; b=lJ46FM+1kQRA/9NdxG1R/cvVR212OMSxed2g0E6gGnSxrwb9TQU7sOJWHjhNPBVODa 4Mv1/T9vLLuqiokuVEUJwUgOxouCIrmOXaj2ZlGCf9b1NCpB6X1WncaGSMRec42rpXRw N+1863cpT33N+v2pMoULeHtNL/Ec8Sjj9dXcUWrMQ6tvAyOeuRE+iG1E2ejc+X4AXqW3 4rS8zqqvqGlRao2gFiy7VK3v25BQZ3LGiGiit884/Wb7Z5zWXSzF2qXLH3fRCX+ygL2f vwznkH2uGayHMYB38rpGEgPt6/ngBpd7co/mNXxVs+NeefOtwcCaPyJeWfKBLnNsSTXc a82A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2KfnzyHm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w4si1047302otq.144.2020.02.20.23.49.51; Thu, 20 Feb 2020 23:50:03 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=2KfnzyHm; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728864AbgBUHsm (ORCPT + 99 others); Fri, 21 Feb 2020 02:48:42 -0500 Received: from mail.kernel.org ([198.145.29.99]:44828 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727315AbgBUHsl (ORCPT ); Fri, 21 Feb 2020 02:48:41 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id C6C55208C4; Fri, 21 Feb 2020 07:48:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582271320; bh=pkzmAGkgONH4rFn4Kchybr1EOFbP5fb3Z/OEklRicnc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2KfnzyHmxLccS+5su/nNBWr/99jO0Fvdo/tDeJ4zCI99vs5e+tVVWk6CXdtSLvENO wxyk9SbTzsciV3OSxlefdYlVIpCZkeYzrYETbkilXm61WXR0FrIHqKfLVfxuXqRkel k001DVbMq2X/vr0NxGGc+SDN6Skv2ITc+FVDQ9Kw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Viresh Kumar , Sasha Levin Subject: [PATCH 5.5 122/399] opp: Free static OPPs on errors while adding them Date: Fri, 21 Feb 2020 08:37:27 +0100 Message-Id: <20200221072414.333210327@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200221072402.315346745@linuxfoundation.org> References: <20200221072402.315346745@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Viresh Kumar [ Upstream commit ba0033192145cbd4e70ef64552958b13d597eb9e ] The static OPPs aren't getting freed properly, if errors occur while adding them. Fix that by calling _put_opp_list_kref() and putting their reference on failures. Fixes: 11e1a1648298 ("opp: Don't decrement uninitialized list_kref") Signed-off-by: Viresh Kumar Signed-off-by: Sasha Levin --- drivers/opp/of.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/opp/of.c b/drivers/opp/of.c index 1cbb58240b801..1e5fcdee043c4 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -678,15 +678,17 @@ static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table) dev_err(dev, "%s: Failed to add OPP, %d\n", __func__, ret); of_node_put(np); - return ret; + goto put_list_kref; } else if (opp) { count++; } } /* There should be one of more OPP defined */ - if (WARN_ON(!count)) - return -ENOENT; + if (WARN_ON(!count)) { + ret = -ENOENT; + goto put_list_kref; + } list_for_each_entry(opp, &opp_table->opp_list, node) pstate_count += !!opp->pstate; @@ -695,7 +697,8 @@ static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table) if (pstate_count && pstate_count != count) { dev_err(dev, "Not all nodes have performance state set (%d: %d)\n", count, pstate_count); - return -ENOENT; + ret = -ENOENT; + goto put_list_kref; } if (pstate_count) @@ -704,6 +707,11 @@ static int _of_add_opp_table_v2(struct device *dev, struct opp_table *opp_table) opp_table->parsed_static_opps = true; return 0; + +put_list_kref: + _put_opp_list_kref(opp_table); + + return ret; } /* Initializes OPP tables based on old-deprecated bindings */ @@ -738,6 +746,7 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table) if (ret) { dev_err(dev, "%s: Failed to add OPP %ld (%d)\n", __func__, freq, ret); + _put_opp_list_kref(opp_table); return ret; } nr -= 2; -- 2.20.1