diff options
| -rw-r--r-- | drivers/usb/gadget/config.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c index f563afe78..014a6791c 100644 --- a/drivers/usb/gadget/config.c +++ b/drivers/usb/gadget/config.c @@ -10,6 +10,7 @@   */  #include <common.h> +#include <asm/unaligned.h>  #include <asm/errno.h>  #include <linux/list.h>  #include <linux/string.h> @@ -86,7 +87,8 @@ int usb_gadget_config_buf(  	/* config descriptor first */  	if (length < USB_DT_CONFIG_SIZE || !desc)  		return -EINVAL; -	*cp = *config; +	/* config need not be aligned */ +	memcpy(cp, config, sizeof(*cp));  	/* then interface/endpoint/class/vendor/... */  	len = usb_descriptor_fillbuf(USB_DT_CONFIG_SIZE + (u8 *)buf, @@ -100,7 +102,7 @@ int usb_gadget_config_buf(  	/* patch up the config descriptor */  	cp->bLength = USB_DT_CONFIG_SIZE;  	cp->bDescriptorType = USB_DT_CONFIG; -	cp->wTotalLength = cpu_to_le16(len); +	put_unaligned_le16(len, &cp->wTotalLength);  	cp->bmAttributes |= USB_CONFIG_ATT_ONE;  	return len;  } |