|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 21/24] tools/(lib)xl: Add partial device tree support for ARM
On 29/01/15 11:03, Stefano Stabellini wrote:
> On Tue, 13 Jan 2015, Julien Grall wrote:
>> Let the user to pass additional nodes to the guest device tree. For this
>> purpose, everything in the node /passthrough from the partial device tree
>> will
>> be copied into the guest device tree.
>>
>> The node /aliases will be also copied to allow the user to define aliases
>> which can be used by the guest kernel.
>>
>> A simple partial device tree will look like:
>>
>> /dts-v1/;
>>
>> / {
>> #address-cells = <2>;
>> #size-cells = <2>;
>>
>> passthrough {
>> compatible = "simple-bus";
>> ranges;
>> #address-cells = <2>;
>> #size-cells = <2>;
>>
>> /* List of your nodes */
>> }
>> };
>
> It would be nice to have an example of this under tools/examples.
Ok. I will add one.
[..]
>> +/*
>> + * Check if a string stored the strings block section is correctly
>> + * nul-terminated.
>> + * off_dt_strings and size_dt_strings fields have been validity-check
>> + * earlier, so it's safe to use them here.
>> + */
>> +static bool check_string(void *fdt, int nameoffset)
>> +{
>> + const char *str = fdt_string(fdt, nameoffset);
>> +
>> + for (; nameoffset < fdt_size_dt_strings(fdt); nameoffset++, str++) {
>> + if (*str == '\0')
>> + return true;
>> + }
>> +
>> + return false;
>> +}
>
> strnlen?
I could but it would not tell us directly if the string is NULL
terminated or not.
What about memchr?
[..]
>> +static int copy_node_by_path(libxl__gc *gc, const char *path,
>> + void *fdt, void *pfdt)
>> +{
>> + int nodeoff, r;
>> + const char *name = strrchr(path, '/');
>> +
>> + if (!name)
>> + return -FDT_ERR_INTERNAL;
>> +
>> + name++;
>> +
>> + /* The FDT function to look at node doesn't take into account the
>> + * unit (i.e anything after @) when search by name. Check if the
>> + * name exactly match.
>> + */
>> + nodeoff = fdt_path_offset(pfdt, path);
>> + if (nodeoff < 0)
>> + return nodeoff;
>> +
>> + if (strcmp(fdt_get_name(pfdt, nodeoff, NULL), name))
>> + return -FDT_ERR_NOTFOUND;
>
> Are we sure that the string returned by fdt_get_name is NULL terminated?
Yes, libfdt does some sanity check on it (see fdt_next_tag case
FDT_BEGIN_NODE).
I tried to fix all the possible security flaw in libfdt (and there is
quite a lot). If we don't trust the rest of libfdt, then we have to
import our own and fix it.
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |