On Sat, 08 Apr 2023 08:48:31 -0600, "Theo de Raadt" wrote: > Mark Kettenis <mark.kette...@xs4all.nl> wrote: > > > > +{ > > > + int len; > > > + > > > + len = OF_getprop(handle, prop, buf, buflen); > > > + if (buflen > 0) > > > + buf[min(len, buflen - 1)] = '\0'; > > > + > > > + return (len); > > > > I've mailed dlg seperately, but will raise it here also. > > If buflen is 0, then why call OF_getprop at all? I doubt this situation > occurs, but you want to protect against it, ok.... > > Maybe in the end if looks like this: > > int len = 0; > if (buflen > 0) { > len = OF_getprop(handle, prop, buf, buflen - 1); > buf[min(len, buflen - 1)] = '\0'; > } > return (len); > > OF_getprop() is now being called with buflen -1, which can avoid one > extra character of processing effort for a long input string.
I think that will be wrong for the "name" property. From sys/dev/ofw/fdt.c:OF_getprop if (len < 0 && strcmp(prop, "name") == 0) { data = fdt_node_name(node); if (data) { len = strlcpy(buf, data, buflen); ... So passing in buflen is probably correct. - todd