David Gibson wrote:
On Thu, Aug 14, 2008 at 12:43:48PM -0500, Scott Wood wrote:
On Thu, Aug 14, 2008 at 08:28:19AM -0500, Kumar Gala wrote:
-       if (*path != '/')
-               return -FDT_ERR_BADPATH;
+       /* see if we have an alias */
+       if (*path != '/') {
+               const char *q;
+               int aliasoffset = fdt_path_offset(fdt, "/aliases");
+
+               if (aliasoffset < 0)
+                       return -FDT_ERR_BADPATH;
+
+               q = strchr(path, '/');
+               if (!q)
+                       q = end;
+
+               p = fdt_getprop_namelen(fdt, aliasoffset, path, q - p, NULL);
+               if (!p)
+                       return -FDT_ERR_BADPATH;
+               offset = fdt_path_offset(fdt, p);
+
+               p = q;
+       }
Can we limit the recursion depth to avoid falling off the stack if an
alias points to itself?  Or if aliases pointing to aliases are
disallowed, check for a leading '/' before recursively calling
fdt_path_offset.

Hmm.. my reading of 1275 says that an alias pointing to another alias
is not permitted, but I'm not terribly confident I'm not misreading
it.  Segher, do you know whether this is allowed?

The 1275 spec doesn't require multiple levels of aliasing, but my current implementation allows it and uses it for things like components of the network stack.


If that's the case then, yes, we should not recurse if the alias value
doesn't start with a /.  In fact, if I factor out a fdt_get_alias()
function, it should probably check the alias and return an error if
it's not an absolute path.

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to