[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xen-cvs
Subject:    [xen master] xen/dt: of_property_read_string return -ENODATA when !length
From:       patchbot () xen ! org
Date:       2022-05-25 23:11:01
Message-ID: E1nu09d-0006O6-P8 () xenbits ! xenproject ! org
[Download RAW message or body]

commit d43d2b6056fc65126e8d991a11f5dec14e51754d
Author:     Stefano Stabellini <stefano.stabellini@xilinx.com>
AuthorDate: Fri May 13 14:07:24 2022 -0700
Commit:     Stefano Stabellini <stefano.stabellini@xilinx.com>
CommitDate: Tue May 24 16:11:06 2022 -0700

    xen/dt: of_property_read_string return -ENODATA when !length
    
    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>
---
 xen/common/device_tree.c      | 2 +-
 xen/include/xen/device_tree.h | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

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,
--
generated by git-patchbot for /home/xen/git/xen.git#master

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic