Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp1698605imm; Sat, 29 Sep 2018 02:07:49 -0700 (PDT) X-Google-Smtp-Source: ACcGV60RRBUWsblXn5ln3D8aAtK5kWCkT8CBH9WaRYuLFeyLm6Z4ZdraXy/imM598woCzyaE6daY X-Received: by 2002:a63:ed55:: with SMTP id m21-v6mr2134182pgk.147.1538212069821; Sat, 29 Sep 2018 02:07:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538212069; cv=none; d=google.com; s=arc-20160816; b=kTqYtFxJrQqJVnnXFxwHS21nbZXw7GjDsiUQocdakO0vA67rte0MMJ/dmM1luzkPik Gsq2Hyzz6amQkMkuwUmm8NmptwOIEA8nXnvemEALuZexHAjJeDNJBjir98E+V3gIz6BY WsFQdr86onrnOoIC0ZCywKan6XlswcO5/e5zNcTEv3e+dcbgLPY1w50C2vlNJAsoV+3f SPO2XN1AK577Ptb9D5Ya5JwwMSxLHEuIGcTu3JyvYgyoj9XHuRQi1NSydaQhAD/8Kuit JGwrJ6QHYklDd+GN+ilMfjHheBUh+u//pDP7RIv3h+HC8wXfoP2RzU3fkQSFS0fGt8m9 2zgg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=yKY45KBwA3liwQIHnMH4skdhjyC/BOIIkxC4AvsTEGM=; b=xCwZp5cgbqQPM8h5SEEDW7PBWpspTNXfH6jL2BET2zDEATcQWH3mCN9Y3xbyv6UJ0U iqDam0CTJsvQuFEE80LY9bOAB9dXYtbg8p7XxDc+yWyzQ2VybrnYEzXTKjjQMKigNqS/ MiQEwYh4bN2WIEaWOJnesbcMA9uxTf6csXAEBwj/t7GoXqrb8VOaMDQSwYYGfsuVkXH5 8lXNbIOlAQYkHIss13U4hv+6karjX67r+pTxjOEwX3ZPu1HRufyZ5SEx3pEy062f7QrL tye9QECon+71C6BeRCrY/Tmxrxx7rPhM0nX0LtvoJfTsAIoniTuro5orEU+iVZav17zV roOg== ARC-Authentication-Results: i=1; mx.google.com; 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 v10-v6si3313821plz.158.2018.09.29.02.07.33; Sat, 29 Sep 2018 02:07:49 -0700 (PDT) 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; 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 S1727850AbeI2PfG convert rfc822-to-8bit (ORCPT + 99 others); Sat, 29 Sep 2018 11:35:06 -0400 Received: from mx01.hxt-semitech.com ([223.203.96.7]:34268 "EHLO barracuda.hxt-semitech.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727638AbeI2PfG (ORCPT ); Sat, 29 Sep 2018 11:35:06 -0400 X-ASG-Debug-ID: 1538212037-093b7e38d1258f40001-xx1T2L Received: from HXTBJIDCEMVIW01.hxtcorp.net ([10.128.0.14]) by barracuda.hxt-semitech.com with ESMTP id pWpL17WtIcRhbTG7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NO); Sat, 29 Sep 2018 17:07:17 +0800 (CST) X-Barracuda-Envelope-From: yanjiang.jin@hxt-semitech.com Received: from controller.hxtcorp.net (10.5.21.105) by HXTBJIDCEMVIW01.hxtcorp.net (10.128.0.14) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Sat, 29 Sep 2018 17:07:07 +0800 From: Yanjiang Jin To: , CC: , , , Subject: [PATCH] pinctrl: core: make sure strcmp() doesn't get a null parameter Date: Sat, 29 Sep 2018 17:06:55 +0800 X-ASG-Orig-Subj: [PATCH] pinctrl: core: make sure strcmp() doesn't get a null parameter Message-ID: <1538212015-10374-2-git-send-email-yanjiang.jin@hxt-semitech.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1538212015-10374-1-git-send-email-yanjiang.jin@hxt-semitech.com> References: <1538212015-10374-1-git-send-email-yanjiang.jin@hxt-semitech.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.5.21.105] X-ClientProxiedBy: HXTBJIDCEMVIW01.hxtcorp.net (10.128.0.14) To HXTBJIDCEMVIW01.hxtcorp.net (10.128.0.14) Content-Transfer-Encoding: 8BIT X-Barracuda-Connect: UNKNOWN[10.128.0.14] X-Barracuda-Start-Time: 1538212037 X-Barracuda-Encrypted: ECDHE-RSA-AES256-SHA384 X-Barracuda-URL: https://192.168.50.101:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at hxt-semitech.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Bayes: INNOCENT GLOBAL 0.5000 1.0000 0.0000 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=9.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.58608 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some drivers, for example, QCOM's qdf2xxx, set groups[gpio].name only when gpio is valid, and leave invalid gpio names as null. If we want to access the sys node "pinconf-groups", pinctrl_get_group_selector() -> get_group_name() may return a null pointer if group_selector is invalid, then the below Kernel panic would happen since strcmp() uses this null pointer to do comparison. Unable to handle kernel NULL pointer dereference at ss 00000000 el:Internal error: Oops: 9600000[ 143.080279] SMP CPU: 19 PID: 2493 Comm: read_all Tainted: G O .aarch64 #1 Hardware name: HXT Semiconductor HXT REP-2 System PC is at strcmp+0x18/0x154 LR is at pinctrl_get_group_selector+0x6c/0xe8 Process read_all (pid: 2493, stack limit = Call trace: Exception stack strcmp+0x18/0x154 pin_config_group_get+0x64/0xd8 pinconf_generic_dump_one+0xd8/0x1c0 pinconf_generic_dump_pins+0x94/0xc8 pinconf_groups_show+0xb4/0x104 seq_read+0x178/0x464 full_proxy_read+0x6c/0xac __vfs_read+0x58/0x178 vfs_read+0x94/0x164 SyS_read+0x60/0xc0 __sys_trace_return+0x0/0x4 --[ end trace]-- Kernel panic - not syncing: Fatal exception Signed-off-by: Yanjiang Jin --- drivers/pinctrl/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index a3dd777..c6ff4d5 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -627,7 +627,7 @@ static int pinctrl_generic_group_name_to_selector(struct pinctrl_dev *pctldev, while (selector < ngroups) { const char *gname = ops->get_group_name(pctldev, selector); - if (!strcmp(function, gname)) + if (gname && !strcmp(function, gname)) return selector; selector++; @@ -743,7 +743,7 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev, while (group_selector < ngroups) { const char *gname = pctlops->get_group_name(pctldev, group_selector); - if (!strcmp(gname, pin_group)) { + if (gname && !strcmp(gname, pin_group)) { dev_dbg(pctldev->dev, "found group selector %u for %s\n", group_selector, -- 1.8.3.1 This email is intended only for the named addressee. It may contain information that is confidential/private, legally privileged, or copyright-protected, and you should handle it accordingly. If you are not the intended recipient, you do not have legal rights to retain, copy, or distribute this email or its contents, and should promptly delete the email and all electronic copies in your system; do not retain copies in any media. If you have received this email in error, please notify the sender promptly. Thank you.