uapi: cdc.h: cleanly provide for more interfaces and countries

The spec requires at least one interface respectively country.
It allows multiple ones. This needs to be clearly said in the UAPI.
This is subject to sanity checking in cdc_parse_cdc_header(), thus
we can trust the length.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Link: https://patch.msgid.link/20251111134641.4118827-1-oneukum@suse.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Oliver Neukum
2025-11-11 14:46:10 +01:00
committed by Greg Kroah-Hartman
parent 8d3c283ef8
commit a67df6d1b9
2 changed files with 9 additions and 5 deletions

View File

@@ -1475,7 +1475,7 @@ made_compressed_probe:
if (!acm->country_codes)
goto skip_countries;
acm->country_code_size = cfd->bLength - 4;
memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
memcpy(acm->country_codes, cfd->wCountryCodes,
cfd->bLength - 4);
acm->country_rel_date = cfd->iCountryCodeRelDate;

View File

@@ -104,8 +104,10 @@ struct usb_cdc_union_desc {
__u8 bDescriptorSubType;
__u8 bMasterInterface0;
__u8 bSlaveInterface0;
/* ... and there could be other slave interfaces */
union {
__u8 bSlaveInterface0;
__DECLARE_FLEX_ARRAY(__u8, bSlaveInterfaces);
};
} __attribute__ ((packed));
/* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
@@ -115,8 +117,10 @@ struct usb_cdc_country_functional_desc {
__u8 bDescriptorSubType;
__u8 iCountryCodeRelDate;
__le16 wCountyCode0;
/* ... and there can be a lot of country codes */
union {
__le16 wCountryCode0;
__DECLARE_FLEX_ARRAY(__le16, wCountryCodes);
};
} __attribute__ ((packed));
/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */