When the length of the string is zero of_property_read_string should
return -ENODATA according to the description of the function.
However, of_property_read_string doesn't check prop->length. If
prop->length is zero, return -ENODATA.
Without this patch the following command in u-boot:
fdt set /chosen/node property-name
results in of_property_read_string returning -EILSEQ when attempting to
read property-name. With this patch, it returns -ENODATA as expected.
This commit is a backport of:
https://lore.kernel.org/xen-devel/
20220416003028.
1315268-1-sstabellini@kernel.org/
Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
Reviewed-by: Luca Fancellu <luca.fancellu@arm.com>
if ( !pp )
return -EINVAL;
- if ( !pp->value )
+ if ( !pp->length )
return -ENODATA;
if ( strnlen(pp->value, pp->length) >= pp->length )
return -EILSEQ;
* doest not have value, and -EILSEQ if the string is not
* null-terminated with the length of the property data.
*
+ * Note that the empty string "" has length of 1, thus -ENODATA cannot
+ * be interpreted as an empty string.
+ *
* The out_string pointer is modified only if a valid string can be decoded.
*/
int dt_property_read_string(const struct dt_device_node *np,