From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Mike McTernan <mikemcternan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: "Pierre-Clément Tosi"
<ptosi-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] libfdt: Validate alias property value is a valid string.
Date: Sun, 14 May 2023 16:50:18 +1000 [thread overview]
Message-ID: <ZGCEqneXuj4L9uxv@yekko> (raw)
In-Reply-To: <20221010100328.2207018-1-mikemcternan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 2296 bytes --]
On Mon, Oct 10, 2022 at 11:03:28AM +0100, Mike McTernan wrote:
> Prevent circular alias resolution causing infinite recursion.
Sorry, I've neglected this forever. Unfortunately, I'm not really
sure what to do with it. On the one hand, this does prevent infinite
recursion which supports the libfdt design goal of being robust
against being given bad trees.
However, although the modern device spec does say "full path"
(although I'm not sure it spells out exactly what that means), I have
a fairly strong memory that IEEE 1275 did allow aliases to reference
one another. Ideally I'd like libfdt to be able to handle trees which
are transcribed from Open Firmware as well as more modern dtbs created
with dtc.
> Signed-off-by: Mike McTernan <mikemcternan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
> ---
> libfdt/fdt_ro.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
> index 9f6c551..870c4a5 100644
> --- a/libfdt/fdt_ro.c
> +++ b/libfdt/fdt_ro.c
> @@ -525,13 +525,27 @@ uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
> const char *fdt_get_alias_namelen(const void *fdt,
> const char *name, int namelen)
> {
> + const char *prop;
> int aliasoffset;
> + int prop_len;
>
> aliasoffset = fdt_path_offset(fdt, "/aliases");
> if (aliasoffset < 0)
> return NULL;
>
> - return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);
> + prop = fdt_getprop_namelen(fdt, aliasoffset, name, namelen, &prop_len);
> + if (prop && !can_assume(VALID_INPUT)) {
> + /* Validate the alias value. From the devicetree spec v0.3:
> + * "An alias value is a device path and is encoded as a string.
> + * The value representes the full path to a node, ..."
> + * A full path must start at the root to prevent recursion.
> + */
> + if (prop_len < 2 || *prop != '/' || strnlen(prop, prop_len) != prop_len - 1) {
> + prop = NULL;
> + }
> + }
> +
> + return prop;
> }
>
> const char *fdt_get_alias(const void *fdt, const char *name)
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
prev parent reply other threads:[~2023-05-14 6:50 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-10 10:03 [PATCH] libfdt: Validate alias property value is a valid string Mike McTernan
[not found] ` <20221010100328.2207018-1-mikemcternan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2023-05-14 6:50 ` David Gibson [this message]
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=ZGCEqneXuj4L9uxv@yekko \
--to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
--cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mikemcternan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=ptosi-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).