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

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



On Fri, Oct 15, 2021 at 04:35:27PM -0500, Rob Herring wrote:
> 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>

Sorry, can you rename the macros as well.  If anything they're *more*
misleading than the function name with this change.

> ---
> 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

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


[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