From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1hDoHi-00084p-4U for mharc-grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51636) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hDoHc-0007yr-KW for grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hDoHa-0006nb-Pm for grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:16 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:49700) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hDoHY-0006jp-Oh for grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:14 -0400 Received: from mercury.suse.de (prva10-snat226-2.provo.novell.com [137.65.226.36]) by smtp2.provo.novell.com with ESMTP (NOT encrypted); Tue, 09 Apr 2019 04:47:02 -0600 From: Michael Chang To: grub-devel@gnu.org Subject: [PATCH 1/8] cpio: fix gcc9 error address-of-packed-member Date: Tue, 9 Apr 2019 18:46:52 +0800 Message-Id: <20190409104659.4125-2-mchang@suse.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20190409104659.4125-1-mchang@suse.com> References: <20190409104659.4125-1-mchang@suse.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 137.65.250.81 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Apr 2019 10:47:18 -0000 Change the read_number function to use void* type as its first argument to silence the warning. The pointer is later type casted to grub_uint16_t* and use grub_get_unaligned16 for safely deferencing it for the value. The solved gcc9 error like this. [ 59s] In file included from ../grub-core/fs/cpio.c:51: [ 59s] ../grub-core/fs/cpio_common.c: In function 'grub_cpio_find_file': [ 59s] ../grub-core/fs/cpio_common.c:58:31: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 58 | data->size = read_number (hd.filesize, ARRAY_SIZE (hd.filesize)); [ 59s] | ~~^~~~~~~~~ [ 59s] ../grub-core/fs/cpio_common.c:60:29: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 60 | *mtime = read_number (hd.mtime, ARRAY_SIZE (hd.mtime)); [ 59s] | ~~^~~~~~ [ 59s] ../grub-core/fs/cpio_common.c:61:28: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 61 | modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode)); [ 59s] | ~~^~~~~ [ 59s] ../grub-core/fs/cpio_common.c:62:29: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 62 | namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize)); [ 59s] | ~~^~~~~~~~~ [ 59s] In file included from ../grub-core/fs/cpio_be.c:51: [ 59s] ../grub-core/fs/cpio_common.c: In function 'grub_cpio_find_file': [ 59s] ../grub-core/fs/cpio_common.c:58:31: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 58 | data->size = read_number (hd.filesize, ARRAY_SIZE (hd.filesize)); [ 59s] | ~~^~~~~~~~~ [ 59s] ../grub-core/fs/cpio_common.c:60:29: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 60 | *mtime = read_number (hd.mtime, ARRAY_SIZE (hd.mtime)); [ 59s] | ~~^~~~~~ [ 59s] ../grub-core/fs/cpio_common.c:61:28: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 61 | modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode)); [ 59s] | ~~^~~~~ [ 59s] ../grub-core/fs/cpio_common.c:62:29: error: taking address of packed member of 'struct head' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 59s] 62 | namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize)); [ 59s] | ~~^~~~~~~~~ Signed-off-by: Michael Chang --- grub-core/fs/cpio.c | 5 +++-- grub-core/fs/cpio_be.c | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/grub-core/fs/cpio.c b/grub-core/fs/cpio.c index dab5f9898..a1aa66689 100644 --- a/grub-core/fs/cpio.c +++ b/grub-core/fs/cpio.c @@ -38,11 +38,12 @@ struct head } GRUB_PACKED; static inline unsigned long long -read_number (const grub_uint16_t *arr, grub_size_t size) +read_number (const void *arr, grub_size_t size) { long long ret = 0; + const grub_uint16_t *p = (const grub_uint16_t *)arr; while (size--) - ret = (ret << 16) | grub_le_to_cpu16 (*arr++); + ret = (ret << 16) | grub_le_to_cpu16 (grub_get_unaligned16 (p++)); return ret; } diff --git a/grub-core/fs/cpio_be.c b/grub-core/fs/cpio_be.c index 846548892..9460d0ec1 100644 --- a/grub-core/fs/cpio_be.c +++ b/grub-core/fs/cpio_be.c @@ -38,11 +38,12 @@ struct head } GRUB_PACKED; static inline unsigned long long -read_number (const grub_uint16_t *arr, grub_size_t size) +read_number (const void *arr, grub_size_t size) { long long ret = 0; + const grub_uint16_t *p = (const grub_uint16_t *)arr; while (size--) - ret = (ret << 16) | grub_be_to_cpu16 (*arr++); + ret = (ret << 16) | grub_be_to_cpu16 (grub_get_unaligned16 (p++)); return ret; } -- 2.16.4