From 6e6523e0e16f1c5dc4c68968eaea94477b458fc0 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Wed, 18 Dec 2019 12:27:58 +0900 Subject: [PATCH] usb: composite: fix unalinged address about packed structure MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Since upgrading to gcc9, warnings are issued: "taking address of packed member of ‘...’ may result in an unaligned pointer value" This patch is refered to below commit - commit 616ebd8b9cb "usb: composite: fix possible alignment issues" Change-Id: Idceb5b56f7daf1481de528f95a1a2f1f9b57c0dd Signed-off-by: Jaehoon Chung --- drivers/usb/gadget/composite.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index d7b4f50..36caf5c 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -52,6 +52,8 @@ extern void udelay(unsigned long usec); /* big enough to hold our biggest descriptor */ #define USB_BUFSIZ 512 +typedef struct { __le16 val;} __attribute__((aligned(16))) __le16_packed; + static struct usb_composite_driver *composite; /* Some systems will need runtime overrides for the product identifers @@ -641,20 +643,21 @@ done: * the host side. */ -static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf) +static void collect_langs(struct usb_gadget_strings **sp, void *buf) { const struct usb_gadget_strings *s; u16 language; - __le16 *tmp; + __le16_packed *tmp; + __le16_packed *end = (buf + 252); while (*sp) { s = *sp; language = cpu_to_le16(s->language); - for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) { - if (*tmp == language) + for (tmp = buf; tmp->val && tmp < end; tmp++) { + if (tmp->val == language) goto repeat; } - *tmp++ = language; + tmp->val = language; repeat: sp++; } -- 2.7.4