Skip to content

Conversation

@HiFiPhile
Copy link
Collaborator

This pull request improves the robustness of the audio device interface validation logic in audio_device.c by adding extra checks to differentiate between Audio and MIDI interfaces.

  • Added logic to verify that the second interface descriptor is specifically Audio Streaming (subclass 2) and not MIDI Streaming (subclass 3), preventing misidentification between audio and MIDI devices.

Copilot AI review requested due to automatic review settings December 2, 2025 13:53
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR enhances the audiod_open function in audio_device.c to properly differentiate between Audio and MIDI device interfaces, preventing the audio driver from incorrectly accepting MIDI devices. The fix adds validation logic to verify that the interface following an Audio Control interface is Audio Streaming (subclass 2) rather than MIDI Streaming (subclass 3).

Key changes:

  • Added explicit return value 0 to all TU_VERIFY and TU_ASSERT macro calls for consistent error handling
  • Implemented new validation block (lines 861-883) to check the second interface descriptor's subclass before accepting the device

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@cmaughan
Copy link

cmaughan commented Dec 2, 2025

This fix tested and worked for my problem in discussion: #3382

@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 2, 2025

@HiFiPhile
Copy link
Collaborator Author

@hathach could you pick this before 0.20.1 tag?

@cmaughan
Copy link

There's a video here of me using this fix, along with MIDI And Vendor connections.
https://youtu.be/GtFvweOVEOg

@github-actions
Copy link

github-actions bot commented Dec 12, 2025

Size Difference Report

Because TinyUSB code size varies by port and configuration, the metrics below represent the averaged totals across all example builds.

Note: If there is no change, only one value is shown.

Changes >1% in size

file .text .data .bss size % diff
audio_device.c 2803 ➙ 2859 (+56) 1228 ➙ 1250 (+22) 1689 4487 ➙ 4543 (+56) +1.2%
TOTAL 2803 ➙ 2859 (+56) 1228 ➙ 1250 (+22) 1689 4487 ➙ 4543 (+56) +1.2%

Changes <1% in size

No entries.

No changes
file .text .rodata .data .bss size % diff
cdc_device.c 1332 16 20 673 2004 +0.0%
cdc_host.c 6614 487 15 1624 8422 +0.0%
dcd_ch32_usbfs.c 1472 0 0 2444 3916 +0.0%
dcd_ch32_usbhs.c 1648 0 0 448 2096 +0.0%
dcd_ci_fs.c 1925 0 0 1290 3215 +0.0%
dcd_ci_hs.c 1725 0 0 1152 2493 +0.0%
dcd_da146xx.c 3067 0 0 144 3211 +0.0%
dcd_dwc2.c 4159 25 0 261 4444 +0.0%
dcd_eptri.c 2270 0 0 259 2529 +0.0%
dcd_khci.c 1953 0 0 1290 3243 +0.0%
dcd_lpc17_40.c 1470 0 0 648 1794 +0.0%
dcd_lpc_ip3511.c 1463 0 0 264 1639 +0.0%
dcd_mm32f327x_otg.c 1478 0 0 1290 2768 +0.0%
dcd_msp430x5xx.c 1796 0 0 176 1972 +0.0%
dcd_musb.c 2228 0 0 160 2388 +0.0%
dcd_nrf5x.c 2919 0 0 292 3211 +0.0%
dcd_nuc120.c 1093 0 0 78 1171 +0.0%
dcd_nuc121.c 1167 0 0 101 1268 +0.0%
dcd_nuc505.c 0 0 1529 157 1686 +0.0%
dcd_rp2040.c 736 20 580 1029 2365 +0.0%
dcd_rusb2.c 2966 0 0 156 3122 +0.0%
dcd_samd.c 1032 0 0 266 1298 +0.0%
dcd_samg.c 1319 0 0 72 1391 +0.0%
dcd_stm32_fsdev.c 3149 3 0 291 3442 +0.0%
dfu_device.c 741 28 712 174 915 +0.0%
dfu_rt_device.c 157 0 134 0 156 +0.0%
dwc2_common.c 781 29 0 0 797 +0.0%
ecm_rndis_device.c 1037 0 1 2272 3310 +0.0%
ehci.c 2651 0 0 5970 8622 +0.0%
hcd_ch32_usbfs.c 2484 0 0 498 2982 +0.0%
hcd_ci_hs.c 229 0 0 0 229 +0.0%
hcd_dwc2.c 4898 32 0 512 5442 +0.0%
hcd_khci.c 2442 0 0 449 2891 +0.0%
hcd_musb.c 3073 0 0 157 3230 +0.0%
hcd_pio_usb.c 262 0 240 0 502 +0.0%
hcd_rp2040.c 936 73 420 512 1941 +0.0%
hcd_rusb2.c 2965 0 0 246 3211 +0.0%
hcd_samd.c 2220 0 0 324 2544 +0.0%
hid_device.c 1119 44 997 117 1235 +0.0%
hid_host.c 1194 0 0 1286 2480 +0.0%
hub.c 1239 8 8 31 1274 +0.0%
midi_device.c 1129 0 991 600 1727 +0.0%
midi_host.c 1340 7 7 4010 5353 +0.0%
msc_device.c 2508 108 2274 544 3052 +0.0%
msc_host.c 1590 0 0 404 1994 +0.0%
mtp_device.c 1622 22 1385 585 2215 +0.0%
ncm_device.c 1503 28 1408 5961 7478 +0.0%
ohci.c 1942 0 0 2414 4356 +0.0%
rp2040_usb.c 124 70 574 4 772 +0.0%
rusb2_common.c 0 0 16 0 16 +0.0%
tusb.c 416 0 361 3 418 +0.0%
tusb_fifo.c 900 0 525 0 894 +0.0%
typec_stm32.c 820 8 2 12 842 +0.0%
usbc.c 408 2 16 166 592 +0.0%
usbd.c 3166 57 88 276 3504 +0.0%
usbd_control.c 523 0 474 79 601 +0.0%
usbh.c 4314 57 61 962 5356 +0.0%
usbtmc_device.c 2169 24 71 287 2488 +0.0%
vendor_device.c 609 0 514 458 1066 +0.0%
video_device.c 4399 6 1851 476 4866 +0.0%
TOTAL 106891 1154 15274 44354 154439 +0.0%

Copy link
Owner

@hathach hathach left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

perfect, thank you.

@hathach hathach merged commit 09f7172 into master Dec 13, 2025
156 checks passed
@hathach hathach deleted the audio_open branch December 13, 2025 00:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants