Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp754431pxb; Fri, 28 Jan 2022 09:15:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJwl5RPkiK1/rSTjiEGl9e2XLEWtClvYHInlJBXAOWPAIRkhX/diZVjP69U76eYetFrY7wvR X-Received: by 2002:a17:90b:3848:: with SMTP id nl8mr7923162pjb.86.1643390128558; Fri, 28 Jan 2022 09:15:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643390128; cv=none; d=google.com; s=arc-20160816; b=J9OnW2MSvTMO01cNvwLdU0IxFOzuN65ABM5p6W4aheVEZwIfvADO/hXG2pyeI0JHPE vZutPplDZsMU58p4BTPxCJGmvsC5MuNn0M5AkG8SCd17HwvAUePYjfGTd03B38/EYukF NXdP+iIBB6T+zxpMZAnJAgFRmrBTfSzyROdQPWO9pmjjl1OMD8obNKZb7p1UZ9d9lXBY 3z14jB/iEpriiYNJs8+T28u/3oc6NgsoyYDgd6u69AcFzB6TmfNLeUBBc6nyYFpwAt2P DwitYE5urZ9hWVFjWT+ZhnkvwgvVs8svrYBtcvTfAsCIOHtEi7vH2YPXO2//7zA8IQAT f1SA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=M4KyLIl9S5rtOUuVugAvQTnfhRh0E8GptPgBaQ0zctA=; b=Zx97G5hYvrZVbusbouG54JF/JXzw4+6ghYYNQfRs0wlT+KKn67eTWjDHTpWmLj9K5/ iABpwl6PP1pDY/Ccp1vRSF0XO8pc8YBHBy82GjccU1ngVUT0Zd4gfxLUd4pu/YSiGgVR 55+pUlpr0PVSQOTqoW05KzAW+TUL+gxRCRySshJZO+gbWU+wE1tu4L7+wZ6N2NlUtAz+ NYIC1Y+BpHeX7oWnsA5DYW+Jxc6SumDrTvu8cui3Fg4FQg/62CuDWGd6ETfXT/RT+Md9 awR9j9//rt6ktASqf5WVnosQ2UxdCNPZECDzr657IyojgSFutMjJK0P9bO3kczAeik3K RIYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcdkim header.b=NVe5CGcj; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y5si6373282plg.169.2022.01.28.09.15.01; Fri, 28 Jan 2022 09:15:28 -0800 (PST) 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=@quicinc.com header.s=qcdkim header.b=NVe5CGcj; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245754AbiA0Tvu (ORCPT + 99 others); Thu, 27 Jan 2022 14:51:50 -0500 Received: from alexa-out.qualcomm.com ([129.46.98.28]:15824 "EHLO alexa-out.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234826AbiA0Tvt (ORCPT ); Thu, 27 Jan 2022 14:51:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1643313109; x=1674849109; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=M4KyLIl9S5rtOUuVugAvQTnfhRh0E8GptPgBaQ0zctA=; b=NVe5CGcjoSjikDzmTWiTHJINAf2UOPoQGvtVbLwcUI4SazVGOzTlP21/ AdWtgreaVZ5w7k1F2rHUUi14P3ewlYtGt4dSW/MDN0LL1UxAsVja4sy3q K73nZb+++inW6KkevTROP2aJosHyCSBXVU0lnqCZKy8QQXZdnU6NxGRER 0=; Received: from ironmsg09-lv.qualcomm.com ([10.47.202.153]) by alexa-out.qualcomm.com with ESMTP; 27 Jan 2022 11:51:49 -0800 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg09-lv.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2022 11:51:48 -0800 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Thu, 27 Jan 2022 11:51:48 -0800 Received: from [10.110.26.31] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Thu, 27 Jan 2022 11:51:46 -0800 Message-ID: Date: Thu, 27 Jan 2022 11:51:45 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: [PATCH 3/3] input: misc: pm8941-pwrkey: avoid potential null pointer dereference Content-Language: en-US To: Bjorn Andersson , Stephen Boyd CC: , , , , , References: <20220120204132.17875-1-quic_amelende@quicinc.com> <20220120204132.17875-4-quic_amelende@quicinc.com> From: Anjelique Melendez In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 1/25/2022 10:37 AM, Bjorn Andersson wrote: > On Mon 24 Jan 17:55 PST 2022, Stephen Boyd wrote: > >> Quoting Bjorn Andersson (2022-01-24 14:26:34) >>> On Thu 20 Jan 20:18 PST 2022, Stephen Boyd wrote: >>> >>>> Quoting Anjelique Melendez (2022-01-20 16:25:26) >>>>> On 1/20/2022 3:01 PM, Bjorn Andersson wrote: >>>>>> On Thu 20 Jan 12:41 PST 2022, Anjelique Melendez wrote: >>>>>> >>>>>>> From: David Collins >>>>>>> >>>>>>> Add a null check for the pwrkey->data pointer after it is assigned >>>>>>> in pm8941_pwrkey_probe(). This avoids a potential null pointer >>>>>>> dereference when pwrkey->data->has_pon_pbs is accessed later in >>>>>>> the probe function. >>>>>>> >>>>>>> Change-Id: I589c4851e544d79a1863fd110b32a0b45ac03caf >>>>>>> Signed-off-by: David Collins >>>>>>> Signed-off-by: Anjelique Melendez >>>>>>> --- >>>>>>> drivers/input/misc/pm8941-pwrkey.c | 4 ++++ >>>>>>> 1 file changed, 4 insertions(+) >>>>>>> >>>>>>> diff --git a/drivers/input/misc/pm8941-pwrkey.c b/drivers/input/misc/pm8941-pwrkey.c >>>>>>> index 0ce00736e695..ac08ed025802 100644 >>>>>>> --- a/drivers/input/misc/pm8941-pwrkey.c >>>>>>> +++ b/drivers/input/misc/pm8941-pwrkey.c >>>>>>> @@ -263,6 +263,10 @@ static int pm8941_pwrkey_probe(struct platform_device *pdev) >>>>>>> >>>>>>> pwrkey->dev = &pdev->dev; >>>>>>> pwrkey->data = of_device_get_match_data(&pdev->dev); >>>>>>> + if (!pwrkey->data) { >>>>>> The only way this can happen is if you add a new compatible and forget >>>>>> to specify data and when that happens you will get a print in the log >>>>>> somewhere, which once you realize that you don't have your pwrkey you >>>>>> might be able to find among all the other prints. >>>>>> >>>>>> If you instead don't NULL check this pointer you will get a large splat >>>>>> in the log, with callstack and all, immediately hinting you that >>>>>> pwrkey->data is NULL. >>>>>> >>>>>> >>>>>> In other words, there's already a print, a much larger print and I don't >>>>>> think there's value in handling this mistake gracefully. >>>>>> >>>>>> Regards, >>>>>> Bjorn >>>>> >>>>> We would like to the null pointer check in place to avoid static analysis >>>>> >>>>> warnings that can be easily fixed. >>>>> >>>> Many drivers check that their device_get_match_data() returns a valid >>>> pointer. I'd like to see that API used in addition to checking the >>>> return value for NULL so that we can keep the static analysis tools >>>> happy. Yes it's an impossible case assuming the driver writer didn't >>>> mess up but it shuts SA up and we don't really have a better solution >>>> to tell tools that device_get_match_data() can't return NULL. >>> I'm not saying that device_get_match_data() can't return NULL, >> Indeed, I wasn't implying that you were saying that. >> >>> I'm >>> saying that in the very specific cases that it would return NULL it's >>> useful to have a kernel panic - as that's a much faster way to figure >>> out that something is wrong. >> I see it as more annoying, but maybe that's my workflow? When my kernel >> oopses I have to go back to a recovery kernel, which takes me a few more >> seconds to "repair" my device. If the driver only failed to probe then >> I'd probably be able to boot far enough to get networking and more >> easily replace my kernel with a working device. And I'd have userspace >> access so I could poke around and figure out why the driver failed to >> probe. Now obviously a big stacktrace would be helpful to know that it's >> the power key driver that's busted, but it's not like we're calling some >> internal API here. We're trying to probe a driver and if that oopses >> because the driver writer failed at their job then it's bad on them for >> writing a bad patch but also annoying for the integrator who has to deal >> with the mess they created. I'd rather have a half working system here >> vs. a totally broken one. > Forgot about your recovery cycle, on most of my boards I just load a new > kernel every boot, so there's no cost of recovering from a panic, it > might even save me some time if it crashes completely before userspace > starts consuming cycles. > > My only concern is that this "sets" a quite fuzzy precedence. I don't > want us to just fix SA warnings all over the place, but I don't want it > to be inconvenient to work on the kernel... > > Regards, > Bjorn I will drop this patch for now so that further discussion can be had. Can send as a separate patch later.