[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