disk: efi: avoid unaligned pointer error
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 14 Jul 2019 16:12:32 +0000 (18:12 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 16 Jul 2019 22:17:21 +0000 (22:17 +0000)
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@gmail.com>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
disk/part_efi.c

index 3e026697dbe9911002db37635fa610dc75338ba5..359b55a818055304cae8170c806df693c958ae31 100644 (file)
@@ -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);