[packages/kernel] add upstream fix for arm scmi init failure and enable quirks

atler atler at pld-linux.org
Sat Sep 20 21:37:46 CEST 2025


commit 4a85f299e8f745d4e5f805157b3b1684c763321c
Author: Jan Palus <atler at pld-linux.org>
Date:   Sat Sep 20 19:28:51 2025 +0200

    add upstream fix for arm scmi init failure and enable quirks

 arm-scmi-init-quirks.patch | 82 ++++++++++++++++++++++++++++++++++++++++++++++
 kernel-multiarch.config    |  2 +-
 kernel.spec                |  2 ++
 3 files changed, 85 insertions(+), 1 deletion(-)
---
diff --git a/kernel.spec b/kernel.spec
index 4fa420df..d8500bdc 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -175,6 +175,7 @@ Patch7000:	kernel-inittmpfs.patch
 # ARM only
 Patch8000:	rpi-sound.patch
 Patch8001:	kernel-pinebook-pro.patch
+Patch8002:	arm-scmi-init-quirks.patch
 Patch8004:	ath-regd.patch
 Patch8005:	rkvdec-hevc.patch
 # Patch8005-md5:	c357a58f19f1466d89ec8ef008ce7e34
@@ -578,6 +579,7 @@ cd linux-%{basever}
 %ifarch %{arm} aarch64
 %patch -P8000 -p1
 %patch -P8001 -p1
+%patch -P8002 -p1
 %patch -P8004 -p1
 %patch -P8005 -p1
 %endif
diff --git a/arm-scmi-init-quirks.patch b/arm-scmi-init-quirks.patch
new file mode 100644
index 00000000..f5dc3cbd
--- /dev/null
+++ b/arm-scmi-init-quirks.patch
@@ -0,0 +1,82 @@
+From 572ce546390d1b7c99b16c38cae1b680c716216c Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan at kernel.org>
+Date: Fri, 29 Aug 2025 15:21:52 +0200
+Subject: firmware: arm_scmi: quirk: Prevent writes to string constants
+
+The quirk version range is typically a string constant and must not be
+modified (e.g. as it may be stored in read-only memory). Attempting
+to do so can trigger faults such as:
+
+  |  Unable to handle kernel write to read-only memory at virtual
+  |  address ffffc036d998a947
+
+Update the range parsing so that it operates on a copy of the version
+range string, and mark all the quirk strings as const to reduce the
+risk of introducing similar future issues.
+
+Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220437
+Fixes: 487c407d57d6 ("firmware: arm_scmi: Add common framework to handle firmware quirks")
+Cc: stable at vger.kernel.org	# 6.16
+Cc: Cristian Marussi <cristian.marussi at arm.com>
+Reported-by: Jan Palus <jpalus at fastmail.com>
+Signed-off-by: Johan Hovold <johan at kernel.org>
+Message-Id: <20250829132152.28218-1-johan at kernel.org>
+[sudeep.holla: minor commit message rewording; switch to cleanup helpers]
+Signed-off-by: Sudeep Holla <sudeep.holla at arm.com>
+---
+ drivers/firmware/arm_scmi/quirks.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+(limited to 'drivers/firmware/arm_scmi')
+
+diff --git a/drivers/firmware/arm_scmi/quirks.c b/drivers/firmware/arm_scmi/quirks.c
+index 03960aca361001..03848283c2a07b 100644
+--- a/drivers/firmware/arm_scmi/quirks.c
++++ b/drivers/firmware/arm_scmi/quirks.c
+@@ -71,6 +71,7 @@
+  */
+ 
+ #include <linux/ctype.h>
++#include <linux/cleanup.h>
+ #include <linux/device.h>
+ #include <linux/export.h>
+ #include <linux/hashtable.h>
+@@ -89,9 +90,9 @@
+ struct scmi_quirk {
+ 	bool enabled;
+ 	const char *name;
+-	char *vendor;
+-	char *sub_vendor_id;
+-	char *impl_ver_range;
++	const char *vendor;
++	const char *sub_vendor_id;
++	const char *impl_ver_range;
+ 	u32 start_range;
+ 	u32 end_range;
+ 	struct static_key_false *key;
+@@ -217,7 +218,7 @@ static unsigned int scmi_quirk_signature(const char *vend, const char *sub_vend)
+ 
+ static int scmi_quirk_range_parse(struct scmi_quirk *quirk)
+ {
+-	const char *last, *first = quirk->impl_ver_range;
++	const char *last, *first __free(kfree) = NULL;
+ 	size_t len;
+ 	char *sep;
+ 	int ret;
+@@ -228,8 +229,12 @@ static int scmi_quirk_range_parse(struct scmi_quirk *quirk)
+ 	if (!len)
+ 		return 0;
+ 
++	first = kmemdup(quirk->impl_ver_range, len + 1, GFP_KERNEL);
++	if (!first)
++		return -ENOMEM;
++
+ 	last = first + len - 1;
+-	sep = strchr(quirk->impl_ver_range, '-');
++	sep = strchr(first, '-');
+ 	if (sep)
+ 		*sep = '\0';
+ 
+-- 
+cgit 1.2.3-korg
+
diff --git a/kernel-multiarch.config b/kernel-multiarch.config
index 70e0daf7..e9c178f3 100644
--- a/kernel-multiarch.config
+++ b/kernel-multiarch.config
@@ -1720,7 +1720,7 @@ ARM_FFA_TRANSPORT arm64=m
 ARM_SCMI_PROTOCOL arm=m arm64=m
 ARM_SCMI_RAW_MODE_SUPPORT arm=n arm64=n
 ARM_SCMI_DEBUG_COUNTERS arm=n arm64=n
-ARM_SCMI_QUIRKS arm=n arm64=n
+ARM_SCMI_QUIRKS arm=y arm64=y
 #- file drivers/firmware/arm_scmi/transports/Kconfig goes here
 #- file drivers/firmware/arm_scmi/vendors/imx/Kconfig goes here
 ARM_SCMI_POWER_CONTROL arm=m arm64=m
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/0ac20805717be41ad52867b27b85f5455a2a59e1



More information about the pld-cvs-commit mailing list