From nobody Mon Apr 6 23:16:47 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A5B6A372B2D; Tue, 17 Mar 2026 10:38:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743902; cv=none; b=oQOMurWYkHVFR4xKuLPWCu9uSOuhva0Hdx+tVEwr1mjjb9U70d9cTFF3Ttn+5OkMna+ZA5xzD3hn/57xYm7gRuejV9/n1jbGlp7rTdoOtVKTKrflq9QIOk8LEGrojOY4qgSm+V5ifw/Thrxe5X3NP+fLnpdPhvcaC8hHasq7k7I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743902; c=relaxed/simple; bh=x68RDYlGTfvYu8lOql1gO5B3Aj+IyfxAdN+QGhbOWjM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TgNK4Kic4oR2736FATxfmyz7o4kptq20/qBPcQfWEKhvqe7/xlE4+20cL3Bsv8xy/0za7gWYjcR//4KGDtpcIkG5l2QZmj/BcfximKEnWE48d3cyKiYIExGXc9K2WY+fbQUxiyaITIR9gr+aCKX/YtO1jm8Zma1k+32sUfgP8Mw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=YyvT5L48; arc=none smtp.client-ip=198.175.65.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="YyvT5L48" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773743901; x=1805279901; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=x68RDYlGTfvYu8lOql1gO5B3Aj+IyfxAdN+QGhbOWjM=; b=YyvT5L48Mwr+MrZKXyhRWhO4OVl9n3snjyZCilJkYpRjqaaU/HUl8shT 38U25iNUOFkjYTI6kVnaXtkUGUBqYdc+lQfc9RaVZhwQ9BeOzDi24x86O 51J6aanZTJqU82kqOUeNhFHPNR7U59OIHWJLc1ojlanm8OWRGELYiSZtK f2570UkiLmrrNCDwh+EifIbuZ5OZ/hXXjyUN6gOa2D3TcgR8x3v+GhNVa U2r3oZsky/w1SmKDorPc+zwCFS4gLXi6inGwUbjUMLCTGEEEZbAxvfLQk HxF3UPnL8W1JHDiR6/hVE7VZCXwVp8fxxFuPIe4JuJk5tPfvzg84ACldE w==; X-CSE-ConnectionGUID: PfS1hrhwRre/W3Mor3gkqA== X-CSE-MsgGUID: YRhnuYgCS7KFZP7erHIMtA== X-IronPort-AV: E=McAfee;i="6800,10657,11731"; a="74659056" X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="74659056" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2026 03:38:21 -0700 X-CSE-ConnectionGUID: gomoqs+8RKCpSfEgPdpXHg== X-CSE-MsgGUID: yt5QwSVkRgq6Be4z/l1+Qg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="252713535" Received: from black.igk.intel.com ([10.91.253.5]) by orviesa002.jf.intel.com with ESMTP; 17 Mar 2026 03:38:18 -0700 Received: by black.igk.intel.com (Postfix, from userid 1003) id 3A3D099; Tue, 17 Mar 2026 11:38:18 +0100 (CET) From: Andy Shevchenko To: Linus Walleij , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko Subject: [PATCH v1 1/3] pinctrl: pinconf-generic: Fully validate 'pinmux' property Date: Tue, 17 Mar 2026 11:36:11 +0100 Message-ID: <20260317103817.1982584-2-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> References: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The pinconf_generic_parse_dt_pinmux() assumes that the 'pinmux' property is not empty when present. This might be not true. With that, the allocator will give a special value in return and not NULL which lead to the crash when trying to access that (invalid) memory. Fix that by fully validating 'pinmux' value, including its length. Fixes: 7112c05fff83 ("pinctrl: pinconf-generic: Add API for pinmux properti= ty in DTS file") Signed-off-by: Andy Shevchenko --- drivers/pinctrl/pinconf-generic.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-ge= neric.c index 61b5b3fb94ce..d0b825ff52db 100644 --- a/drivers/pinctrl/pinconf-generic.c +++ b/drivers/pinctrl/pinconf-generic.c @@ -325,12 +325,17 @@ int pinconf_generic_parse_dt_pinmux(struct device_nod= e *np, struct device *dev, return -ENOENT; } =20 + npins_t =3D prop->length / sizeof(u32); + if (npins_t =3D=3D 0) { + dev_info(dev, "pinmux property doesn't have entries\n"); + return -ENODATA; + } + if (!pid || !pmux || !npins) { dev_err(dev, "parameters error\n"); return -EINVAL; } =20 - npins_t =3D prop->length / sizeof(u32); pid_t =3D devm_kcalloc(dev, npins_t, sizeof(*pid_t), GFP_KERNEL); pmux_t =3D devm_kcalloc(dev, npins_t, sizeof(*pmux_t), GFP_KERNEL); if (!pid_t || !pmux_t) { --=20 2.50.1 From nobody Mon Apr 6 23:16:47 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F6223A6F1D; Tue, 17 Mar 2026 10:38:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743904; cv=none; b=Q1oEN7QiB6RcsF8I3srWF+sTr2EVbqcdjQJsKdS0h7iuz2Ozl0DbIq+UvQEPVYD5fuDPkVKQFY5zRNmDj7mZ4MYqr0enQwq6XMxJaTBXUKkvPTxegIlSJNKZgwZkHHWZZazYL3bD+EgHJwznpQPEAYKGF2HQfvu2HYJXJaEPnWk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743904; c=relaxed/simple; bh=T0SRPM6/sTrNxUml9I3UmGm3cDD5/1UB3PFQKW7oWh4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b3xJ2aOVnhHYMujolrEt4pRabtOG30kjU2TVArcncR+q6HuYC72YQ64Gu0LOLXou+N72RJ8WTVy1TKX2TtW2evxUyxM5vKWcwptuniQhroHwh/SeB+g09HK4V0f3CpUGbEPyVlTPfORvFf65tb055XDEfqzhkvF5JD08H+/xhf8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QD2FTsD1; arc=none smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QD2FTsD1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773743903; x=1805279903; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=T0SRPM6/sTrNxUml9I3UmGm3cDD5/1UB3PFQKW7oWh4=; b=QD2FTsD1G2zln3aTVYHjQ7Br4pKTHr2BkQuWnHv9H7bEddPpVP7sS2yS 8lD4hevdgpeii7TuliuB4z14XbneELAnh4fsyMDKvAUMXIJaL1aI2VlIO 17N9AKrClEi6L/D9wy6JwZv1k6F3T1B8UYvJZ5M4KZWFU3rw5xuaHL5R7 ss7LxkEM+VZda4B6JEFnppVu1TN9nLX5lWbuFgrYhARMYghJiqXCLMsXR vQZ5VCmWoRPQpH+8Qrm9lMH3W3E9rtN5xBjsnac4wwqgZhdEVnkT4BkUb A/usC6bJcbNcZ0i2imxE67lk97sBK/rZnZFV+fusgQDtSKixxv/AYUJ7c w==; X-CSE-ConnectionGUID: CZP8kqFASsq0xnfLcRO6qw== X-CSE-MsgGUID: Fb8FMCShTyy7zttvxQr5sA== X-IronPort-AV: E=McAfee;i="6800,10657,11731"; a="74889861" X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="74889861" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2026 03:38:20 -0700 X-CSE-ConnectionGUID: elcTDcIBTxWjQEVRPH+hfQ== X-CSE-MsgGUID: vC+o2wEnTaGgtLYHaFhNSg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="245243179" Received: from black.igk.intel.com ([10.91.253.5]) by fmviesa002.fm.intel.com with ESMTP; 17 Mar 2026 03:38:19 -0700 Received: by black.igk.intel.com (Postfix, from userid 1003) id 3E53C9B; Tue, 17 Mar 2026 11:38:18 +0100 (CET) From: Andy Shevchenko To: Linus Walleij , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko Subject: [PATCH v1 2/3] pinctrl: pinconf-generic: Validate fwnode instead of device node Date: Tue, 17 Mar 2026 11:36:12 +0100 Message-ID: <20260317103817.1982584-3-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> References: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently we convert device node to fwnode in the pinconf_generic_parse_dt_config() and then validate the device node. This is confusing order. Instead, assign fwnode and validate it. Fixes: e002d162654b ("pinctrl: pinconf-generic: Use only fwnode API in pars= e_dt_cfg()") Signed-off-by: Andy Shevchenko --- drivers/pinctrl/pinconf-generic.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-ge= neric.c index d0b825ff52db..0ed57720ae61 100644 --- a/drivers/pinctrl/pinconf-generic.c +++ b/drivers/pinctrl/pinconf-generic.c @@ -377,12 +377,13 @@ int pinconf_generic_parse_dt_config(struct device_nod= e *np, unsigned long **configs, unsigned int *nconfigs) { - struct fwnode_handle *fwnode =3D of_fwnode_handle(np); unsigned long *cfg; unsigned int max_cfg, ncfg =3D 0; + struct fwnode_handle *fwnode; int ret; =20 - if (!np) + fwnode =3D of_fwnode_handle(np); + if (!fwnode) return -EINVAL; =20 /* allocate a temporary array big enough to hold one of each option */ --=20 2.50.1 From nobody Mon Apr 6 23:16:47 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B2C03A640A; Tue, 17 Mar 2026 10:38:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743903; cv=none; b=YgQ4G9I0+nz3uy/E2w5RhQmX8cCz6KoV/sXteUACAo0Ppo6G1519Rnt6jfEAVgdlAKw9yS/10XkhFWsMu8f9wS8R4SVFwTQAAkq3A5FdKB+w/F8ahN5ZWipLry+tAcwKppL2DRRmD6c5ofiwGP3Jhjw5A2RsXqBbfuTbXyzo6QU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773743903; c=relaxed/simple; bh=cGzMZ9JtGT36Qn1Zexx/gT8Un2Y2TM5eZ7Egijqx0ls=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YSNE26TDhJtkm9LdeIiXLxMvntM56pwV0kfK5EJWTxVzSp3qhNVdoopsJPaZuDFocvDjP6uTpf6YwaP7CGPN7+r8P3y++EZPe2QuzCq3fF+U1xkRvnOtCWH0VcFvmE4JgSPzjTxEr9rjASDOw567pKe39uZ0/9HzY9dPICUGbbU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=DdXmsbtV; arc=none smtp.client-ip=192.198.163.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="DdXmsbtV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1773743901; x=1805279901; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=cGzMZ9JtGT36Qn1Zexx/gT8Un2Y2TM5eZ7Egijqx0ls=; b=DdXmsbtVZkui/OGoWE8mxWY5bifU2BRq0p24wfnEJro89u+4sVstDikd +0mKmyCaiq+umdsH4//xBMQznFRjQNmIYvO1+b9bhqTCn1caGTdqenkMb 6FL1Wu9CFo4A6HMWqu2qiZ4e0DSC5CQrGtj4+WWTm+WqsJKVyrvnzm2ag XcyYGgiSqdvsXDccWGky8Ofovrqq8G2XVvNYGfr0HB4o4qZ3JjmzlO/nK fq1EUu8uY7XQVqfiQVfbGZ71IbHEzioy8S60F4ArGQv1kIGe/xjViDWUO N9XfC+Vq4rY1xjVo7QIfUFbXUYjh4H/hPcihyqKLwoMVk89A1nwALvqTJ Q==; X-CSE-ConnectionGUID: +ggBJpfuQqKIzeWVgALwBQ== X-CSE-MsgGUID: oMnVppyDSsKZitGrY6YtRA== X-IronPort-AV: E=McAfee;i="6800,10657,11731"; a="74889859" X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="74889859" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa109.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2026 03:38:20 -0700 X-CSE-ConnectionGUID: 3TEEc9qIS3Ka8cMEgkWF4Q== X-CSE-MsgGUID: bZE3CJ9vTryPKCvsRrWv8A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,124,1770624000"; d="scan'208";a="245243178" Received: from black.igk.intel.com ([10.91.253.5]) by fmviesa002.fm.intel.com with ESMTP; 17 Mar 2026 03:38:19 -0700 Received: by black.igk.intel.com (Postfix, from userid 1003) id 42D0D9D; Tue, 17 Mar 2026 11:38:18 +0100 (CET) From: Andy Shevchenko To: Linus Walleij , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko Subject: [PATCH v1 3/3] pinctrl: pinconf-generic: Convert ..._parse_dt_pinmux() to fwnode API Date: Tue, 17 Mar 2026 11:36:13 +0100 Message-ID: <20260317103817.1982584-4-andriy.shevchenko@linux.intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> References: <20260317103817.1982584-1-andriy.shevchenko@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert pinconf_generic_parse_dt_pinmux() to fwnode API. This makes code cleaner and potentially reusable for some other types of fwnodes, such as software nodes. Signed-off-by: Andy Shevchenko --- drivers/pinctrl/pinconf-generic.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-ge= neric.c index 0ed57720ae61..88eacd1aa2de 100644 --- a/drivers/pinctrl/pinconf-generic.c +++ b/drivers/pinctrl/pinconf-generic.c @@ -312,20 +312,19 @@ int pinconf_generic_parse_dt_pinmux(struct device_nod= e *np, struct device *dev, unsigned int **pid, unsigned int **pmux, unsigned int *npins) { + struct fwnode_handle *fwnode =3D of_fwnode_handle(np); unsigned int *pid_t; unsigned int *pmux_t; - struct property *prop; unsigned int npins_t, i; - u32 value; int ret; =20 - prop =3D of_find_property(np, "pinmux", NULL); - if (!prop) { + ret =3D fwnode_property_count_u32(fwnode, "pinmux"); + if (ret < 0) { dev_info(dev, "Missing pinmux property\n"); - return -ENOENT; + return ret; } =20 - npins_t =3D prop->length / sizeof(u32); + npins_t =3D ret; if (npins_t =3D=3D 0) { dev_info(dev, "pinmux property doesn't have entries\n"); return -ENODATA; @@ -342,14 +341,16 @@ int pinconf_generic_parse_dt_pinmux(struct device_nod= e *np, struct device *dev, dev_err(dev, "kalloc memory fail\n"); return -ENOMEM; } + + ret =3D fwnode_property_read_u32_array(fwnode, "pinmux", pmux_t, npins_t); + if (ret) { + dev_err(dev, "get pinmux value fail\n"); + goto exit; + } + for (i =3D 0; i < npins_t; i++) { - ret =3D of_property_read_u32_index(np, "pinmux", i, &value); - if (ret) { - dev_err(dev, "get pinmux value fail\n"); - goto exit; - } - pmux_t[i] =3D value & 0xff; - pid_t[i] =3D (value >> 8) & 0xffffff; + pid_t[i] =3D pmux_t[i] >> 8; + pmux_t[i] =3D pmux_t[i] & 0xff; } *pid =3D pid_t; *pmux =3D pmux_t; --=20 2.50.1