[PATCH 1/2] cmd: fdt: Fix iteration over elements above index 2 in fdt get

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Mon Nov 14 09:22:34 CET 2022


On 11/13/22 21:45, Marek Vasut wrote:
> Always increment both the iterator and pointer into the string
> property value by length of the current element + 1 (to cater
> for the string delimiter), otherwise the element extracted from
> the string property value would be extracted from an offset that
> is multiple of the length of the first element, instead of sum
> of element lengths until select index.
> 
> This fixes 'fdt get value' operation for index above 2.

As '0' is the first index: %s/above 2/above 1/

Acked-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>

> 
> Fixes: 13982ced2cc ("cmd: fdt: Add support for reading stringlist property values")
> Signed-off-by: Marek Vasut <marex at denx.de>
> ---
> Cc: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Tom Rini <trini at konsulko.com>
> ---
>   cmd/fdt.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/cmd/fdt.c b/cmd/fdt.c
> index 4b2dcfec863..8e51a431261 100644
> --- a/cmd/fdt.c
> +++ b/cmd/fdt.c
> @@ -60,11 +60,14 @@ static int fdt_value_env_set(const void *nodep, int len,
>   		 * Iterate over all members in stringlist and find the one at
>   		 * offset $index. If no such index exists, indicate failure.
>   		 */
> -		for (i = 0; i < len; i += strlen(nodec) + 1) {
> -			if (index-- > 0)
> +		for (i = 0; i < len; ) {
> +			if (index-- > 0) {
> +				i += strlen(nodec) + 1;
> +				nodec += strlen(nodec) + 1;
>   				continue;
> +			}
>   
> -			env_set(var, nodec + i);
> +			env_set(var, nodec);
>   			return 0;
>   		}
>   



More information about the U-Boot mailing list