[PATCH 2/2] checks: Add a sanity check for #.*-cells property value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



While in theory any value of number of cells is allowed for a #.*-cells
property, for all practical purposes the number of cells is never more than
a few cells. Add a check that the value is less than 255. This will catch
cases like this which will currently pass:

  #foo-cells = "bar";

Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
---
v3:
 - Rename check_is_cell to check_is_provider_cell
v2:
 - new patch
---
 checks.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/checks.c b/checks.c
index 781ba1129a8e..704e99ebd66c 100644
--- a/checks.c
+++ b/checks.c
@@ -250,8 +250,9 @@ static void check_is_string_list(struct check *c, struct dt_info *dti,
 #define ERROR_IF_NOT_STRING_LIST(nm, propname) \
 	ERROR(nm, check_is_string_list, (propname))
 
-static void check_is_cell(struct check *c, struct dt_info *dti,
-			  struct node *node)
+/* A check for provider '#.*-cells' properties */
+static void check_is_provider_cell(struct check *c, struct dt_info *dti,
+				   struct node *node)
 {
 	struct property *prop;
 	char *propname = c->data;
@@ -260,13 +261,19 @@ static void check_is_cell(struct check *c, struct dt_info *dti,
 	if (!prop)
 		return; /* Not present, assumed ok */
 
-	if (prop->val.len != sizeof(cell_t))
+	if (prop->val.len != sizeof(cell_t)) {
 		FAIL_PROP(c, dti, node, prop, "property is not a single cell");
+		return;
+	}
+
+	/* Sanity test for reasonable number of cells */
+	if (propval_cell(prop) > 255)
+		FAIL_PROP(c, dti, node, prop, "cell size out of range (>255)");
 }
 #define WARNING_IF_NOT_CELL(nm, propname) \
-	WARNING(nm, check_is_cell, (propname))
+	WARNING(nm, check_is_provider_cell, (propname))
 #define ERROR_IF_NOT_CELL(nm, propname) \
-	ERROR(nm, check_is_cell, (propname))
+	ERROR(nm, check_is_provider_cell, (propname))
 
 /*
  * Structural check functions
-- 
2.30.2




[Index of Archives]     [Device Tree]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux