[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240702-unissued-dreamlike-badd0fb75ab0@spud>
Date: Tue, 2 Jul 2024 15:08:05 +0100
From: Conor Dooley <conor@...nel.org>
To: Jesse Taube <jesse@...osinc.com>
Cc: linux-riscv@...ts.infradead.org, Ard Biesheuvel <ardb@...nel.org>,
Paul Walmsley <paul.walmsley@...ive.com>,
Palmer Dabbelt <palmer@...belt.com>,
Albert Ou <aou@...s.berkeley.edu>,
Nathan Chancellor <nathan@...nel.org>,
Nick Desaulniers <ndesaulniers@...gle.com>,
Bill Wendling <morbo@...gle.com>,
Justin Stitt <justinstitt@...gle.com>,
Alexandre Ghiti <alexghiti@...osinc.com>,
Conor Dooley <conor.dooley@...rochip.com>,
Masahiro Yamada <masahiroy@...nel.org>,
Wende Tan <twd2.me@...il.com>,
Christophe JAILLET <christophe.jaillet@...adoo.fr>,
Sami Tolvanen <samitolvanen@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Baoquan He <bhe@...hat.com>,
"Mike Rapoport (IBM)" <rppt@...nel.org>,
"Vishal Moola (Oracle)" <vishal.moola@...il.com>,
linux-kernel@...r.kernel.org, llvm@...ts.linux.dev
Subject: Re: [PATCH v3 4/4] RISC-V: Use Zkr to seed KASLR base address
On Mon, Jul 01, 2024 at 02:51:32PM -0400, Jesse Taube wrote:
> +/**
> + * isa_string_contains - check if isa string contains an extension
> + *
> + * @isa_str: isa string to search
> + * @ext_name: the extension to search for
> + *
> + * Returns true if the extension is in the given isa string,
> + * false otherwise
> + */
> +static bool isa_string_contains(const char *isa_str, const char *ext_name)
> +{
> + size_t i, single_end, len = strlen(ext_name);
> + char ext_end;
> +
> + /* Error must contain rv32/64 */
> + if (strlen(isa_str) < 4)
> + return false;
> +
> + if (len == 1) {
> + single_end = strcspn(isa_str, "sSxXzZ");
> + /* Search for single chars between rv32/64 and multi-letter extensions */
> + for (i = 4; i < single_end; i++) {
> + if (tolower(isa_str[i]) == ext_name[0])
> + return true;
> + }
> + return false;
> + }
> +
> + /* Skip to start of multi-letter extensions */
> + isa_str = strpbrk(isa_str, "sSxXzZ");
Technically this could break with the old QEMUs that had "su" in the
single letter part, but at this point I think enough time has passed
that it does not matter.
> + while (isa_str) {
> + if (strncasecmp(isa_str, ext_name, len) == 0) {
> + ext_end = isa_str[len];
> + /* Check if matches the whole extension excluding version. */
> + if (ext_end == '\0' || ext_end == '_' || isdigit(ext_end))
I'm also not entirely sure about the final clause here. If you have an
extension "foo" and "foo32b", you'd match on the latter, right? I don't
think any extensions like that at the minute (foo32b type stuff does,
but the "root" alphabetical part for a foo32b doesn't), but I also don't
wanna have to chase down bugs in a parser this early in the future! The
devicetree binding doesn't actually allow anyone to put version
information in the isa string, so maybe the thing to do is just drop the
isdigit() check, given we only support devicetree right now for this early
probing?
> + return true;
> + }
> + /* Multi-letter extensions must be split from other multi-letter
> + * extensions with an "_", the end of a multi-letter extension will
> + * either be the null character or the "_" at the start of the next
> + * multi-letter extension.
> + */
> + isa_str = strchr(isa_str, '_');
> + if (isa_str)
> + isa_str++;
> + }
> +
> + return false;
> +}
Otherwise, I think this is fine now. Thanks for the updates.
Cheers,
Conor.
Download attachment "signature.asc" of type "application/pgp-signature" (229 bytes)
Powered by blists - more mailing lists