[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 Thu, 29 Jan 2015, Julien Grall wrote: > 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. you can use it to find if it is NULL terminated because it returns maxlen in that case: The strnlen() function returns strlen(s), if that is less than maxlen, or maxlen if there is no null byte ('\0') among the first maxlen bytes pointed to by s. > 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. I was just asking because you clearly didn't trust its output earlier but you did in this case. That's OK for me. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |