Message ID | 20220429205732.2030094-1-sstabellini@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | dom0less PV drivers | expand |
> On 29 Apr 2022, at 21:57, Stefano Stabellini <sstabellini@kernel.org> wrote: > > From: Stefano Stabellini <stefano.stabellini@xilinx.com> > > 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: Luca Fancellu <luca.fancellu@arm.com> > --- > Changes in v5: > - backport from Linux, I don't have the commit id yet so I used an LKML > link instead for now
Hi Stefano, > On 29 Apr 2022, at 21:57, Stefano Stabellini <sstabellini@kernel.org> wrote: > > From: Stefano Stabellini <stefano.stabellini@xilinx.com> > > 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> Cheers Bertrand
diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c index 4aae281e89..0e8798bd24 100644 --- a/xen/common/device_tree.c +++ b/xen/common/device_tree.c @@ -198,7 +198,7 @@ int dt_property_read_string(const struct dt_device_node *np, if ( !pp ) return -EINVAL; - if ( !pp->value ) + if ( !pp->length ) return -ENODATA; if ( strnlen(pp->value, pp->length) >= pp->length ) return -EILSEQ; diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h index fd6cd00b43..430a1ef445 100644 --- a/xen/include/xen/device_tree.h +++ b/xen/include/xen/device_tree.h @@ -451,6 +451,9 @@ static inline bool_t dt_property_read_bool(const struct dt_device_node *np, * 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,