From: Conor Dooley <conor@kernel.org>
To: u-boot@lists.denx.de
Cc: conor@kernel.org, Conor Dooley <conor.dooley@microchip.com>,
Rick Chen <rick@andestech.com>, Leo <ycliang@andestech.com>,
Tom Rini <trini@konsulko.com>, Simon Glass <sjg@chromium.org>,
Chanho Park <chanho61.park@samsung.com>,
Heinrich Schuchardt <xypron.glpk@gmx.de>,
Bin Meng <bmeng.cn@gmail.com>,
palmer@dabbelt.com
Subject: [PATCH v1] riscv: cpu: improve multi-letter extension detection in supports_extension()
Date: Mon, 4 Mar 2024 23:28:35 +0000 [thread overview]
Message-ID: <20240304232835.3076533-2-conor@kernel.org> (raw)
From: Conor Dooley <conor.dooley@microchip.com>
The first multi-letter extension after the single-letter extensions does
not have to be preceded by an underscore, which could cause the parser
to mistakenly find a single-letter extension after the start of the
multi-letter portion of the string.
Three letters precede multi-letter extensions (s, x & z), none of which
are valid single-letter extensions. The dt-binding also allows
multi-letter extensions starting with h, but no such extension have been
frozen or ratified, and the unprivileged spec no longer uses "h" as a
prefix for multi-letter hypervisor extensions, having moved to "sh"
instead. For that reason, modify the parser to stop at s, x & z to prevent
this overrun, ignoring h.
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
---
The parser in U-Boot only supports single-letter extensions & the
single-letter h has to be at the end of the single-letter section, so it
would not be difficult to terminate parsing once a h is seen (you'd need
to support the hypervisor extension to support additional hypervisor
extensions after all) if in the future a multi-letter extension starting
with h did come about. I've got no problem adding a special case for h,
but I'm tempted to just remove the multi-letter h extensions from the
binding, given there's actually not going to be any extensions ratified
using that naming scheme.
CC: Rick Chen <rick@andestech.com>
CC: Leo <ycliang@andestech.com>
CC: Tom Rini <trini@konsulko.com>
CC: Simon Glass <sjg@chromium.org>
CC: Chanho Park <chanho61.park@samsung.com>
CC: Heinrich Schuchardt <xypron.glpk@gmx.de>
CC: Bin Meng <bmeng.cn@gmail.com>
CC: Conor Dooley <conor.dooley@microchip.com>
CC: palmer@dabbelt.com
CC: u-boot@lists.denx.de
---
arch/riscv/cpu/cpu.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
index 8445c5823e..ecfefa1a02 100644
--- a/arch/riscv/cpu/cpu.c
+++ b/arch/riscv/cpu/cpu.c
@@ -49,14 +49,24 @@ static inline bool supports_extension(char ext)
}
if (!cpu_get_desc(dev, desc, sizeof(desc))) {
/*
- * skip the first 4 characters (rv32|rv64) and
- * check until underscore
+ * skip the first 4 characters (rv32|rv64)
*/
for (i = 4; i < sizeof(desc); i++) {
- if (desc[i] == '_' || desc[i] == '\0')
- break;
- if (desc[i] == ext)
- return true;
+ switch (desc[i]) {
+ case 's':
+ case 'x':
+ case 'z':
+ case '_':
+ case '\0':
+ /*
+ * Any of these characters mean the single
+ * letter extensions have all been consumed.
+ */
+ return false;
+ default:
+ if (desc[i] == ext)
+ return true;
+ }
}
}
--
2.43.0
next reply other threads:[~2024-03-04 23:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-04 23:28 Conor Dooley [this message]
2024-03-05 7:34 ` [PATCH v1] riscv: cpu: improve multi-letter extension detection in supports_extension() Heinrich Schuchardt
2024-03-05 7:54 ` Conor Dooley
2024-03-05 8:10 ` Heinrich Schuchardt
2024-03-05 18:38 ` Conor Dooley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240304232835.3076533-2-conor@kernel.org \
--to=conor@kernel.org \
--cc=bmeng.cn@gmail.com \
--cc=chanho61.park@samsung.com \
--cc=conor.dooley@microchip.com \
--cc=palmer@dabbelt.com \
--cc=rick@andestech.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
--cc=ycliang@andestech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.