From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1hDoHg-00081I-QO for mharc-grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:20 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51674) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hDoHe-0007zQ-Fv for grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hDoHa-0006nM-NT for grub-devel@gnu.org; Tue, 09 Apr 2019 06:47:18 -0400 Received: from smtp2.provo.novell.com ([137.65.250.81]:43880) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hDoHY-0006ko-PJ 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:07 -0600 From: Michael Chang To: grub-devel@gnu.org Subject: [PATCH 6/8] usbtest: fix gcc9 error address-of-packed-member Date: Tue, 9 Apr 2019 18:46:57 +0800 Message-Id: <20190409104659.4125-7-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:19 -0000 Copy the packed member descstrp->str to the buffer strbuf returned by grub_malloc, which is supposed to be suitably aligned for any data type and after we use strbuf as argument to grub_utf16_to_utf8. The solved gcc9 error like this. [ 229s] ../../grub-core/commands/usbtest.c: In function 'grub_usb_get_string': [ 229s] ../../grub-core/commands/usbtest.c:104:58: error: taking address of packed member of 'struct grub_usb_desc_str' may result in an unaligned pointer value [-Werror=address-of-packed-member] [ 229s] 104 | *grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, [ 229s] | ~~~~~~~~^~~~~ Signed-off-by: Michael Chang --- grub-core/commands/usbtest.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/grub-core/commands/usbtest.c b/grub-core/commands/usbtest.c index 01cdca934..b42e746c0 100644 --- a/grub-core/commands/usbtest.c +++ b/grub-core/commands/usbtest.c @@ -69,6 +69,7 @@ grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid, { struct grub_usb_desc_str descstr; struct grub_usb_desc_str *descstrp; + grub_uint16_t *strbuf; grub_usb_err_t err; /* Only get the length. */ @@ -101,8 +102,18 @@ grub_usb_get_string (grub_usb_device_t dev, grub_uint8_t index, int langid, return GRUB_USB_ERR_INTERNAL; } - *grub_utf16_to_utf8 ((grub_uint8_t *) *string, descstrp->str, + strbuf = grub_malloc (descstrp->length - sizeof (*descstrp)); + if (!strbuf) + { + grub_free (*string); + grub_free (descstrp); + return GRUB_USB_ERR_INTERNAL; + } + + grub_memcpy (strbuf, descstrp->str, descstrp->length - sizeof (*descstrp)); + *grub_utf16_to_utf8 ((grub_uint8_t *) *string, strbuf, descstrp->length / 2 - 1) = 0; + grub_free (strbuf); grub_free (descstrp); return GRUB_USB_ERR_NONE; -- 2.16.4