Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp886390ybt; Fri, 19 Jun 2020 17:01:23 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwh07dYUV8AZ1adUbuOfSXByyF0KtHpyuTYQY08iEiuKmx/zN5UZKHqaz1/RO7ECz4YOeyc X-Received: by 2002:a17:906:3843:: with SMTP id w3mr6121945ejc.177.1592611283732; Fri, 19 Jun 2020 17:01:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592611283; cv=none; d=google.com; s=arc-20160816; b=xC1bsmnwQ5xTyWsmNzvx+YoaM2cjRvPUpCQbPBX4qbwPN3b3v8PkdgfE0/5pxG4PVc BSM2BWO9XJ6ytvfciJ8CmE6WdYAdD9cEAz2vMehNuq3ur1r242ckrMg9d0torFkjQE72 Pi2xD2d5PZ4xl1KK7q7h52Y/OywPyZTKZDu5PYCAAX0vCTJ02C+Tv9J2kI1ECzzgt3cw gN+PkeagxtYN0+fOkULfFUvJ9h8YiJN6BeFYreCxFQ0SbGz1H92XWnVZz3BR6hbLk8Nt sDaCRel/mXXBz2I7lQlT9IBld/7rVToRrrX8udO4NEgN8EeAW2IVYOB0Pms+AmT8oOXB /wQw== 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=lrUJ3kqwUeec2RS7Z5UC0+4TVJJzLbJ8knp4oBN2o7U=; b=dC0G8wMvfR+oMR9gPOdhVm6mOryUNgDSbfc50dYjuU4mWcX/M+Rz3P7mYSCT7K3Oal PB9MTiBmoaH4Eg2cDFcKN/6kZQdjsps00iIvawB7Nh4VeKfzUh19vTXx8TFde9dxff11 F7RKNT2k7ShuE/wiCEMgJDsniVWOV6qX+yVtYUbp+bRdBbuha0TSWCD5OXo2oe6RZPFx /fvC+GTll7rSNUjQuhugRuM4jWn5nVcnSkMrXtkY0aoSDBkaJGaZqij08pnzHWyGp06q JvxO3vYTrHCeUX6QG3jNCr834aAvEjlUcb4dMMY01Ne2KnDmhi2Zog1s5PteeFV6Gf2F xG7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="0Kno/ZUq"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a15si4714399ejd.215.2020.06.19.17.01.01; Fri, 19 Jun 2020 17:01:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="0Kno/ZUq"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393818AbgFSPbW (ORCPT + 99 others); Fri, 19 Jun 2020 11:31:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:35170 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393783AbgFSPbK (ORCPT ); Fri, 19 Jun 2020 11:31:10 -0400 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 963E720734; Fri, 19 Jun 2020 15:31:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592580669; bh=Cj3n0XTwhCg+EkvrE/zsdb1K+4DKdGGpbmvgDDCCccU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0Kno/ZUqUMj8cq5M5PAowHEBT1IJX0KqlUL2TvaAt6/TJG72i0Gf8j4/AHOvjcpA9 +ruZraO7lmS90Oobw1b5yvdvFzUJcoSzoLMYaIWeC2+tAob5yqmuGUZ7+4FaEDMYS0 sOgxlftVHpfreJp1XBm4uFAJglDeAy/sptIYxBoo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Erhard F." , Michael Ellerman Subject: [PATCH 5.7 337/376] drivers/macintosh: Fix memleak in windfarm_pm112 driver Date: Fri, 19 Jun 2020 16:34:15 +0200 Message-Id: <20200619141726.285539729@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141710.350494719@linuxfoundation.org> References: <20200619141710.350494719@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: Michael Ellerman commit 93900337b9ac2f4eca427eff6d187be2dc3b5551 upstream. create_cpu_loop() calls smu_sat_get_sdb_partition() which does kmalloc() and returns the allocated buffer. In fact it's called twice, and neither buffer is freed. This results in a memory leak as reported by Erhard: unreferenced object 0xc00000047081f840 (size 32): comm "kwindfarm", pid 203, jiffies 4294880630 (age 5552.877s) hex dump (first 32 bytes): c8 06 02 7f ff 02 ff 01 fb bf 00 41 00 20 00 00 ...........A. .. 00 07 89 37 00 a0 00 00 00 00 00 00 00 00 00 00 ...7............ backtrace: [<0000000083f0a65c>] .smu_sat_get_sdb_partition+0xc4/0x2d0 [windfarm_smu_sat] [<000000003010fcb7>] .pm112_wf_notify+0x104c/0x13bc [windfarm_pm112] [<00000000b958b2dd>] .notifier_call_chain+0xa8/0x180 [<0000000070490868>] .blocking_notifier_call_chain+0x64/0x90 [<00000000131d8149>] .wf_thread_func+0x114/0x1a0 [<000000000d54838d>] .kthread+0x13c/0x190 [<00000000669b72bc>] .ret_from_kernel_thread+0x58/0x64 unreferenced object 0xc0000004737089f0 (size 16): comm "kwindfarm", pid 203, jiffies 4294880879 (age 5552.050s) hex dump (first 16 bytes): c4 04 01 7f 22 11 e0 e6 ff 55 7b 12 ec 11 00 00 ...."....U{..... backtrace: [<0000000083f0a65c>] .smu_sat_get_sdb_partition+0xc4/0x2d0 [windfarm_smu_sat] [<00000000b94ef7e1>] .pm112_wf_notify+0x1294/0x13bc [windfarm_pm112] [<00000000b958b2dd>] .notifier_call_chain+0xa8/0x180 [<0000000070490868>] .blocking_notifier_call_chain+0x64/0x90 [<00000000131d8149>] .wf_thread_func+0x114/0x1a0 [<000000000d54838d>] .kthread+0x13c/0x190 [<00000000669b72bc>] .ret_from_kernel_thread+0x58/0x64 Fix it by rearranging the logic so we deal with each buffer separately, which then makes it easy to free the buffer once we're done with it. Fixes: ac171c46667c ("[PATCH] powerpc: Thermal control for dual core G5s") Cc: stable@vger.kernel.org # v2.6.16+ Reported-by: Erhard F. Signed-off-by: Michael Ellerman Tested-by: Erhard F. Link: https://lore.kernel.org/r/20200423060038.3308530-1-mpe@ellerman.id.au Signed-off-by: Greg Kroah-Hartman --- drivers/macintosh/windfarm_pm112.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) --- a/drivers/macintosh/windfarm_pm112.c +++ b/drivers/macintosh/windfarm_pm112.c @@ -132,14 +132,6 @@ static int create_cpu_loop(int cpu) s32 tmax; int fmin; - /* Get PID params from the appropriate SAT */ - hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL); - if (hdr == NULL) { - printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n"); - return -EINVAL; - } - piddata = (struct smu_sdbp_cpupiddata *)&hdr[1]; - /* Get FVT params to get Tmax; if not found, assume default */ hdr = smu_sat_get_sdb_partition(chip, 0xC4 + core, NULL); if (hdr) { @@ -152,6 +144,16 @@ static int create_cpu_loop(int cpu) if (tmax < cpu_all_tmax) cpu_all_tmax = tmax; + kfree(hdr); + + /* Get PID params from the appropriate SAT */ + hdr = smu_sat_get_sdb_partition(chip, 0xC8 + core, NULL); + if (hdr == NULL) { + printk(KERN_WARNING"windfarm: can't get CPU PID fan config\n"); + return -EINVAL; + } + piddata = (struct smu_sdbp_cpupiddata *)&hdr[1]; + /* * Darwin has a minimum fan speed of 1000 rpm for the 4-way and * 515 for the 2-way. That appears to be overkill, so for now, @@ -174,6 +176,9 @@ static int create_cpu_loop(int cpu) pid.min = fmin; wf_cpu_pid_init(&cpu_pid[cpu], &pid); + + kfree(hdr); + return 0; }