CVE-2026-93120
NoneCVSS
—
EPSS
0.2%
Published
Sep 17, 2026
CISA due date
—
Cloudanix analysis
A mistake in how the Linux kernel handles a USB gadget signature field can accidentally reveal nearby internal memory contents through a configuration interface.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Out-of-bounds read in os_desc_qw_sign_show and related store path where utf16s_to_utf8s/utf8s_to_utf16s are passed byte counts instead of UTF-16 code-unit counts for the 7-element qw_sign array, allowing reads up to 14 bytes into adjacent struct gadget_info members when the signature lacks a NUL terminator.
Why it matters to the business
Kernel memory contents adjacent to the gadget signature can be exposed through a configfs attribute, potentially leaking internal kernel data that could aid further attacks on systems using USB gadget mode; low immediate risk but requires kernel update on affected devices.
How an attack unfolds
An attacker with access to the configfs USB gadget configuration creates or modifies an OS descriptor, stores a 14-byte signature without NUL terminator, then reads the qw_sign attribute; the conversion function reads past the array end into following structure fields and returns those bytes to user space.
How to fix it
Apply the upstream kernel patch that corrects both the input length passed to utf16s_to_utf8s and the output limit passed to utf8s_to_utf16s so that code-unit counts are used consistently; rebuild and deploy updated kernel images for all affected systems using USB gadget/configfs.
How to confirm the fix worked
Confirm the patched kernel source contains the corrected length calculations using destination array size in code units for both directions; test by storing a maximum-length non-NUL-terminated signature and verifying the show path returns only the expected 7 code units without adjacent memory content.
Typical attack path
- Mount or access configfs USB gadget hierarchy
- Create or select an OS descriptor entry
- Write a full 14-byte signature value without trailing NUL via the store path
- Read the qw_sign attribute to trigger the show path and obtain leaked bytes
- Parse returned data for sensitive kernel memory contents
How to detect it
Examine kernel logs and configfs access traces for repeated reads of the OS descriptor qw_sign attribute after writes of maximum-length signatures; look for unexpected data patterns or memory disclosure artifacts in gadget configuration operations.
What your security team should do
- Prioritize kernel updates on any systems exposing USB gadget functionality via configfs
- Audit devices that rely on USB gadget mode for OS descriptor handling
- Monitor upstream stable kernel releases for the merged fix
- Restrict configfs access to trusted processes until patched kernels are deployed
The record
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: configfs: fix out-of-bounds read of qw_sign os_desc_qw_sign_show() passes OS_STRING_QW_SIGN_LEN as the input length to utf16s_to_utf8s(), but that argument counts UTF-16 code units while OS_STRING_QW_SIGN_LEN (14) is the byte size of qw_sign[]. The array holds only OS_STRING_QW_SIGN_LEN / 2 (7) code units, so the conversion reads up to 7 units (14 bytes) past the end of qw_sign[] into the following members of struct gadget_info when the stored signature fills the array without a NUL terminator, exposing those bytes through the configfs attribute. The store path halves the count for its input bound but passes the full byte count as the utf8s_to_utf16s() output limit; use the destination code-unit count in both directions.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|