[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 5/6] xen/dt-overlay: support phandle-based targeting in overlay_get_nodes_info


  • To: "Orzel, Michal" <Michal.Orzel@xxxxxxx>
  • From: Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Date: Thu, 16 Apr 2026 09:07:25 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=amd.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bm5UJllHbmNZIIv/M7TUu8Wi/T/dV4sYogTv03TP/yk=; b=J/FBTAW9cDLE7cvZCW1429c2pq0my7yaE8pEzy51klk2FrnPO2nB6OKiRBhJPAELueYGJCZ8yY8upIxnJJxiW9R94CwMZZ2xA3NEvvz8mHGI1EGP35np1OQkdA0FpmICfJ/hJbg8mV6IvY8JrnSsZap7PpAFfkSpqvn6CWyd9gXHsTcK+tQ5JRkoutktBLnHySYm7h5mRjMeQTtftCZV5uZOq56aaD7VU9NNELeMODs5LnEoOaAm3yKoBzBojqo1RdiwVP3U/6fNoMNh5JjpKGG0Dt89V/+IVFv+IXwfagCCymdwK8AkPa6snbiySHAU6EIQpTZObWjpVxxW19yKxw==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bm5UJllHbmNZIIv/M7TUu8Wi/T/dV4sYogTv03TP/yk=; b=pxclCoH92GJ1d9vlPnQhlHoNSzwpAVmXJRBI1vDb3+ZFqeM4IcZ0eUvjZuLBP2OmRH5xaiQiEpn4Mw3NFR5z8ONqL7ji5bVNxzH6OE3foZBRS64xZdMdCez2tWjuHtDqAtttG8LdMZwCBSwkhziw/u1bIwAV9l72/srBbS+iV+SqAhbx1lr3NqNinNxKNuf+YUoqnBCi9u7wlORD2PjRMDEhg1KfXcFFxKFXWgwBgJchEMOmvjxkkZZEPh4km0HRaz5VUKgiP4mXvnJYwlXNmxwLWaYZvex5yp0Y8GxuqTCkBfuRlV9IwOLM9Q1ex1CijQZ4+ApnNg1CT9My+8Ydmg==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=MikJ1ZYx8lklMNkZ7Lx/9q21mSty4tX7e1F78s1HpDbZhXKBEqSkNft8Ww8hDmt6xya3zqBR1P0jlHoNwC228v6mFTRIF5nXg+U4Cy3RRfoNJiJvC7iAw6iPkZVcfHSIZ+IcogihlNyciZ9N08jDW6tLOpCo+9Jf/ll/n64gys7cZZU5TEb1EJbddGHbdI1ISMkbsbjZ44+adGwX0BgHCosCEOYW26AAro9dVwYFM3N4aN6ocW9l3sbDqW/FivrpaVTN86NRWu7Opw0g8B2Awa8N04yr97+nT8mZ/BS31kKES+3JN4Jjvg17niTodJUslmoPbASyWEWMklLHS64ScQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tqd5Cni1oDVLkxpy93okFBQvBkEydRnSMmMXuD6zP7vUMTFJlOwOZQRDntjkiMtfMWl4IzY6mcLq0Ny2Lg6OOs2kZZ18PSywn0VxqDMyq+Indg6neShURYfQABKUnXriMW3WfS30ft6q5I8wp46HHbeLr0deEIDN0lSonuDelFLWLAF+CZw3SSsfYTeKTMhcAzZ5yIrMjhcMUM641XmyWGhkyjA291x2tG1f1P2/p61qP8POV/FStGiGFmUNQJkkYUSGsViZ4BMCjgcSzIo5VDlK/NNvm99fq93vJNTsIRBD68HWQlvLwYw6r3dqCF+GU57rgl3wJ4HznLrIyJZWhg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Delivery-date: Thu, 16 Apr 2026 09:08:54 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHczMxJn1pwTu5+sUmN2MgYtFAQK7XgQWaAgAELlQCAAA1zAIAABFcAgAAIYIA=
  • Thread-topic: [PATCH 5/6] xen/dt-overlay: support phandle-based targeting in overlay_get_nodes_info


> On 16 Apr 2026, at 09:36, Orzel, Michal <Michal.Orzel@xxxxxxx> wrote:
> 
> 
> 
> On 16/04/2026 10:21, Luca Fancellu wrote:
>>>>> 
>>>>> diff --git a/xen/common/device-tree/dt-overlay.c 
>>>>> b/xen/common/device-tree/dt-overlay.c
>>>>> index d3d4669718ac..a0dee7edb7e5 100644
>>>>> --- a/xen/common/device-tree/dt-overlay.c
>>>>> +++ b/xen/common/device-tree/dt-overlay.c
>>>>> @@ -286,6 +286,63 @@ static unsigned int overlay_node_count(const void 
>>>>> *overlay_fdt)
>>>>>   return num_overlay_nodes;
>>>>> }
>>>>> 
>>>>> +/*
>>>>> + * Resolve the target path for an overlay fragment.
>>>>> + *
>>>>> + * This is called before fdt_overlay_apply(), so phandle-based targets
>>>>> + * (target = <&label>) are still unresolved (compiled as 0xffffffff by 
>>>>> DTC).
>>>>> + * Handle the two cases that actually occur:
>>>>> + *  - target-path property: the path string is used directly,
>>>>> + *  - target = <&label>: the label is looked up in the overlay's 
>>>>> __fixups__
>>>>> + *    node, then resolved to a path via the base DTB's __symbols__ node.
>>>>> + *
>>>>> + * Returns a pointer into the FDT on success, NULL on failure.
>>>>> + */
>>>>> +static const char *overlay_get_target_path(const void *fdt, const void 
>>>>> *fdto,
>>>>> +                                           int fragment)
>>>>> +{
>>>>> +    const char *path, *fragment_name;
>>>>> +    int fixups_off, symbols_off, property;
>>>>> +    int fragment_name_len;
>>>>> +
>>>>> +    /* Try target-path first (string-based targeting) */
>>>>> +    path = fdt_getprop(fdto, fragment, "target-path", NULL);
>>>>> +    if ( path )
>>>>> +        return path;
>>>>> +
>>>>> +    /* Phandle-based target: resolve via __fixups__ and __symbols__ */
>>>>> +    fixups_off = fdt_path_offset(fdto, "/__fixups__");
>>>>> +    if ( fixups_off < 0 )
>>>>> +        return NULL;
>>>>> +
>>>>> +    symbols_off = fdt_path_offset(fdt, "/__symbols__");
>>>>> +    if ( symbols_off < 0 )
>>>>> +        return NULL;
>>>>> +
>>>>> +    fragment_name = fdt_get_name(fdto, fragment, &fragment_name_len);
>>>>> +    if ( !fragment_name )
>>>>> +        return NULL;
>>>>> +
>>>>> +    fdt_for_each_property_offset(property, fdto, fixups_off)
>>>>> +    {
>>>>> +        const char *val, *label, *p;
>>>>> +        int val_len;
>>>>> +
>>>>> +        val = fdt_getprop_by_offset(fdto, property, &label, &val_len);
>>>>> +        if ( !val )
>>>>> +            continue;
>>>>> +
>>>>> +        /* Match entries of the form "/<fragment_name>:target:0" */
>>>>> +        for ( p = val; p < (val + val_len); p += (strlen(p) + 1) )
>>>> 
>>>> what guarantees us that p will be null terminated, if a malformed overlay
>>>> is passed this strlen can read past the string, we can use strnlen having 
>>>> as
>>>> upper bound a counter=val_len? decreasing counter each iteration.
>>>> 
>>>> Or do you think it can never happen?
>>> In theory it can happen, in practice this is something not usually taken 
>>> into
>>> account. But we can surely stay on the defensive side and do a single check
>>> right after fdt_getprop_by_offset to catch not-NUL terminated stringlist:
>>> if ( !val || !val_len || val[val_len - 1] != '\0' )
>> 
>> Ok, do we also want to print a warning in case of malformed properties 
>> instead
>> of ignoring and continue?
> That's really a matter of taste. I would not do it unless you really want to.

I’ll leave this to the other maintainer, with the fix above:

Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>

Cheers,
Luca


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.