devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] fdt_ro: Fix fdt_get_property_namelen() length bug
@ 2011-03-28 22:19 Peter Tyser
       [not found] ` <1301350775-27040-1-git-send-email-ptyser-AQeFf1F/bRxBDgjK7y7TUQ@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Peter Tyser @ 2011-03-28 22:19 UTC (permalink / raw)
  To: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ

fdt_get_property_namelen() should only compare 'namelen' characters when
matching a property name.  The previous code compared 'namelen'
characters correctly, but also required the property name length to
exactly match 'namelen'.

This length matching requirement would result in bugs such as
"ethernet0" not being found when using fdt_get_property_namelen() to
find properties starting with "ethernet".

Fix the bug by allowing the property name length to be greater than or
equal to 'namelen'.

Also, fix a typo in the fdt_get_property_namelen() description.

Signed-off-by: Peter Tyser <ptyser-AQeFf1F/bRxBDgjK7y7TUQ@public.gmane.org>
Reported-by: Chris Anacker <canacker-AQeFf1F/bRxBDgjK7y7TUQ@public.gmane.org>
---
Let me know if this isn't the right mailing list for dtc/libfdt fixes.
This issue isn't in the Linux kernel since it differs from the dtc
tree, but is in other packages, eg U-Boot.  Please keep me on CC,
I'm not subscribed to this list.

 libfdt/fdt_ro.c |    2 +-
 libfdt/libfdt.h |    4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
index 02b6d68..8e03eb6 100644
--- a/libfdt/fdt_ro.c
+++ b/libfdt/fdt_ro.c
@@ -85,7 +85,7 @@ static int _fdt_string_eq(const void *fdt, int stroffset,
 {
 	const char *p = fdt_string(fdt, stroffset);
 
-	return (strlen(p) == len) && (memcmp(p, s, len) == 0);
+	return (strlen(p) >= len) && (memcmp(p, s, len) == 0);
 }
 
 int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
index 55f3eb3..1762c27 100644
--- a/libfdt/libfdt.h
+++ b/libfdt/libfdt.h
@@ -419,8 +419,8 @@ const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
  * @namelen: number of characters of name to consider
  * @lenp: pointer to an integer variable (will be overwritten) or NULL
  *
- * Identical to fdt_get_property_namelen(), but only examine the first
- * namelen characters of name for matching the property name.
+ * Identical to fdt_get_property(), but only examine the first namelen
+ * characters of name for matching the property name.
  */
 const struct fdt_property *fdt_get_property_namelen(const void *fdt,
 						    int nodeoffset,
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-03-29  4:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-28 22:19 [PATCH] fdt_ro: Fix fdt_get_property_namelen() length bug Peter Tyser
     [not found] ` <1301350775-27040-1-git-send-email-ptyser-AQeFf1F/bRxBDgjK7y7TUQ@public.gmane.org>
2011-03-29  1:34   ` David Gibson
2011-03-29  2:47     ` Peter Tyser
2011-03-29  4:04       ` David Gibson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).