[U-Boot] [PATCH] disk: efi: avoid unaligned pointer error
Ramon Fried
rfried.dev at gmail.com
Sun Jul 14 18:48:51 UTC 2019
On Sun, Jul 14, 2019 at 7:44 PM Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> When building with GCC 9.1 an error occurs:
>
> disk/part_efi.c: In function ‘gpt_verify_partitions’:
> disk/part_efi.c:737:49: error: taking address of packed member of
> ‘struct _gpt_entry’ may result in an unaligned pointer value
> [-Werror=address-of-packed-member]
> 737 | gpt_convert_efi_name_to_char(efi_str, gpt_e[i].partition_name,
> | ~~~~~~~~^~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> make[1]: *** [scripts/Makefile.build:279: disk/part_efi.o] Error 1
> make: *** [Makefile:1594: disk] Error 2
>
> Adjust gpt_convert_efi_name_to_char() to accept unaligned strings.
>
> Reported-by: Ramon Fried <rfried.dev at gmail.com>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> Makefile | 2 +-
> disk/part_efi.c | 13 +++++++++++--
> 2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 73fdf70cdd..a0e521363e 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -665,7 +665,7 @@ endif
> endif
>
> # Prohibit date/time macros, which would make the build non-deterministic
> -KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
> +KBUILD_CFLAGS += $(call cc-option,-Werror)
Is this part of the patch or commited by mistake ?
>
> include scripts/Makefile.extrawarn
>
> diff --git a/disk/part_efi.c b/disk/part_efi.c
> index 3e026697db..359b55a818 100644
> --- a/disk/part_efi.c
> +++ b/disk/part_efi.c
> @@ -670,9 +670,18 @@ err:
> return ret;
> }
>
> -static void gpt_convert_efi_name_to_char(char *s, efi_char16_t *es, int n)
> +/**
> + * gpt_convert_efi_name_to_char() - convert u16 string to char string
> + *
> + * TODO: this conversion only supports ANSI characters
> + *
> + * @s: target buffer
> + * @es: u16 string to be converted
> + * @n: size of target buffer
> + */
> +static void gpt_convert_efi_name_to_char(char *s, void *es, int n)
> {
> - char *ess = (char *)es;
> + char *ess = es;
> int i, j;
>
> memset(s, '\0', n);
> --
> 2.22.0
>
More information about the U-Boot
mailing list