summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReinhard Panhuber <[email protected]>2020-06-20 11:10:35 +0200
committerReinhard Panhuber <[email protected]>2020-06-20 11:10:35 +0200
commit28505cf03e31b5e7f0f9dddd8073975d305daa5d (patch)
tree15b9f98ea4bec3f5824517fbac7db3e7b42065b5 /src
parent948728b82e785f52c4ee3b7bb290cd90526ac629 (diff)
parentada82b840f642681f8012cb2a46aa7577393dd30 (diff)
Merge branch 'master' into uac2
Conflicts: src/device/usbd.c
Diffstat (limited to 'src')
-rw-r--r--src/class/hid/hid_device.c4
-rw-r--r--src/class/msc/msc_device.c6
-rw-r--r--src/device/usbd.c15
-rw-r--r--src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c1
4 files changed, 15 insertions, 11 deletions
diff --git a/src/class/hid/hid_device.c b/src/class/hid/hid_device.c
index 2a20bc173..526394d4a 100644
--- a/src/class/hid/hid_device.c
+++ b/src/class/hid/hid_device.c
@@ -194,7 +194,9 @@ uint16_t hidd_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint1
p_hid->boot_mode = false; // default mode is REPORT
p_hid->itf_num = desc_itf->bInterfaceNumber;
- memcpy(&p_hid->report_desc_len, &(p_hid->hid_descriptor->wReportLength), 2);
+
+ // Use offsetof to avoid pointer to the odd/misaligned address
+ memcpy(&p_hid->report_desc_len, (uint8_t*) p_hid->hid_descriptor + offsetof(tusb_hid_descriptor_hid_t, wReportLength), 2);
// Prepare for output endpoint
if (p_hid->ep_out)
diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c
index b038d00f7..3ddcd4e49 100644
--- a/src/class/msc/msc_device.c
+++ b/src/class/msc/msc_device.c
@@ -80,7 +80,8 @@ static inline uint32_t rdwr10_get_lba(uint8_t const command[])
// copy first to prevent mis-aligned access
uint32_t lba;
- memcpy(&lba, &p_rdwr10->lba, 4);
+ // use offsetof to avoid pointer to the odd/misaligned address
+ memcpy(&lba, (uint8_t*) p_rdwr10 + offsetof(scsi_write10_t, lba), 4);
// lba is in Big Endian format
return tu_ntohl(lba);
@@ -93,7 +94,8 @@ static inline uint16_t rdwr10_get_blockcount(uint8_t const command[])
// copy first to prevent mis-aligned access
uint16_t block_count;
- memcpy(&block_count, &p_rdwr10->block_count, 2);
+ // use offsetof to avoid pointer to the odd/misaligned address
+ memcpy(&block_count, (uint8_t*) p_rdwr10 + offsetof(scsi_write10_t, block_count), 2);
return tu_ntohs(block_count);
}
diff --git a/src/device/usbd.c b/src/device/usbd.c
index ff127a3c1..b5264bc17 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -450,7 +450,7 @@ void tud_task (void)
if ( 0 == epnum )
{
- usbd_control_xfer_cb(event.rhport, ep_addr, event.xfer_complete.result, event.xfer_complete.len);
+ usbd_control_xfer_cb(event.rhport, ep_addr, (xfer_result_t)event.xfer_complete.result, event.xfer_complete.len);
}
else
{
@@ -458,7 +458,7 @@ void tud_task (void)
TU_ASSERT(drv_id < USBD_CLASS_DRIVER_COUNT,);
TU_LOG2(" %s xfer callback\r\n", _usbd_driver[drv_id].name);
- _usbd_driver[drv_id].xfer_cb(event.rhport, ep_addr, event.xfer_complete.result, event.xfer_complete.len);
+ _usbd_driver[drv_id].xfer_cb(event.rhport, ep_addr, (xfer_result_t)event.xfer_complete.result, event.xfer_complete.len);
}
}
break;
@@ -776,7 +776,7 @@ static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
// If IAD exist, assign all interfaces to the same driver
if (desc_itf_assoc)
{
- // IAD's first interface number and class/subclass/protocol should match with opened interface
+ // IAD's first interface number and class should match with opened interface
TU_ASSERT(desc_itf_assoc->bFirstInterface == desc_itf->bInterfaceNumber &&
desc_itf_assoc->bFunctionClass == desc_itf->bInterfaceClass);
@@ -859,8 +859,10 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
if (!tud_descriptor_bos_cb) return false;
tusb_desc_bos_t const* desc_bos = (tusb_desc_bos_t const*) tud_descriptor_bos_cb();
+
uint16_t total_len;
- memcpy(&total_len, &desc_bos->wTotalLength, 2); // possibly mis-aligned memory
+ // Use offsetof to avoid pointer to the odd/misaligned address
+ memcpy(&total_len, (uint8_t*) desc_bos + offsetof(tusb_desc_bos_t, wTotalLength), 2);
return tud_control_xfer(rhport, p_request, (void*) desc_bos, total_len);
}
@@ -874,7 +876,8 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
TU_ASSERT(desc_config);
uint16_t total_len;
- memcpy(&total_len, &desc_config->wTotalLength, 2); // possibly mis-aligned memory
+ // Use offsetof to avoid pointer to the odd/misaligned address
+ memcpy(&total_len, (uint8_t*) desc_config + offsetof(tusb_desc_configuration_t, wTotalLength), 2);
return tud_control_xfer(rhport, p_request, (void*) desc_config, total_len);
}
@@ -928,8 +931,6 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
default: return false;
}
-
- return true;
}
//--------------------------------------------------------------------+
diff --git a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
index c5666421b..b539f4795 100644
--- a/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
+++ b/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
@@ -698,7 +698,6 @@ bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc
default:
TU_ASSERT(false);
- return false;
}
pcd_set_eptype(USB, epnum, wType);