summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/usb-drv-as3525v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/usb-drv-as3525v2.c')
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 35b50d21cf..3d4f1579c5 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -87,8 +87,23 @@ enum ep0state
87/* endpoints[ep_num][DIR_IN/DIR_OUT] */ 87/* endpoints[ep_num][DIR_IN/DIR_OUT] */
88static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2]; 88static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2];
89/* setup packet for EP0 */ 89/* setup packet for EP0 */
90static struct usb_ctrlrequest _ep0_setup_pkt __attribute__((aligned(32))); 90
91static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt); 91/* USB control requests may be up to 64 bytes in size.
92 Even though we never use anything more than the 8 header bytes,
93 we are required to accept request packets of up to 64 bytes size.
94 Provide buffer space for these additional payload bytes so that
95 e.g. write descriptor requests (which are rejected by us, but the
96 payload is transferred anyway) do not cause memory corruption.
97 Fixes FS#12310. -- Michael Sparmann (theseven) */
98static struct
99{
100 union {
101 struct usb_ctrlrequest header; /* 8 bytes */
102 unsigned char payload[64];
103 };
104} _ep0_setup_pkt USB_DEVBSS_ATTR __attribute__((aligned(32)));
105
106static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt.header);
92 107
93/* state of EP0 */ 108/* state of EP0 */
94static enum ep0state ep0_state; 109static enum ep0state ep0_state;