[PATCH] smbios: Fix table when no string is present
Simon Glass
sjg at chromium.org
Thu Mar 25 01:38:21 CET 2021
Hi Matthias,
On Thu, 18 Mar 2021 at 00:30, <matthias.bgg at kernel.org> wrote:
>
> From: Matthias Brugger <mbrugger at suse.com>
>
> When no string is present in a table, next_ptr points to the same
> location as eos. When calculating the string table length, we would only
> reserve one \0. By spec a SMBIOS table has to end with two \0\0 when no
> strings a present.
>
> Signed-off-by: Matthias Brugger <mbrugger at suse.com>
>
> ---
>
> lib/smbios.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
There is a bug here but I don't think this is right fix. I remember
worrying about this, making the same change as you did, reverting it
and then forgetting about it :-( It has no tests.
You are effectively changing the definition of next_ptr here:
* @next_ptr: pointer to the start of the next string to be added. When the
* table is not empty, this points to the byte after the \0 of the
* previous string.
(there is a typo in that in the code)
I think that breaks adding new strings.
Can you instead change smbios_string_table_len() to add 2?
>
> diff --git a/lib/smbios.c b/lib/smbios.c
> index 7d463c84a9..d21d37cdac 100644
> --- a/lib/smbios.c
> +++ b/lib/smbios.c
> @@ -153,7 +153,7 @@ static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop)
> static void smbios_set_eos(struct smbios_ctx *ctx, char *eos)
> {
> ctx->eos = eos;
> - ctx->next_ptr = eos;
> + ctx->next_ptr = eos + 1;
> ctx->last_str = NULL;
> }
>
> --
> 2.30.2
>
Regards,
Simon
More information about the U-Boot
mailing list