CVE-2026-80918
NoneCVSS
—
EPSS
0.2%
Published
Sep 9, 2026
CISA due date
—
Cloudanix analysis
A bug in how Linux reads certain input device descriptions can accidentally print a secret internal memory address into system logs, which attackers could use to make other attacks more effective.
- Exploitation
- Physical Access
- Attacker needs
- Physical Access
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- OS kernel
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw is a type confusion in HID descriptor parsing where item_udata() and item_sdata() treat a long-format HID_ITEM_TAG_LONG item's kernel pointer (stored in item->data.longdata) as a short-format integer, returning the lower half of that pointer value instead of the intended data.
Why it matters to the business
A locally connected or emulated malicious HID device can trigger a kernel pointer disclosure into system logs, giving attackers a building block for more reliable kernel exploits on affected Linux systems.
How an attack unfolds
An attacker crafts a USB or Bluetooth HID device whose report descriptor encodes a REPORT_SIZE item using the long format with size=4. When the kernel calls hid_scan_report() on attachment, the pointer reinterpretation leaks the lower 32 bits of a kernel address into dmesg as an "invalid report_size" value; the main hid_parse_collections() path rejects long items so the device is only partially processed.
How to fix it
Apply the upstream fix that adds short-format checks inside item_udata() and item_sdata(); rebuild and reboot with a patched kernel. Until patches are available, restrict untrusted HID devices via USBGuard or physical port controls and consider disabling HID long-item parsing if a downstream patch removes the code path.
How to confirm the fix worked
After patching, connect a test HID device containing a long-format REPORT_SIZE item and confirm the kernel log no longer emits an "invalid report_size" message containing a large hexadecimal-looking number; also verify that hid_scan_report() no longer dereferences long-item data as short integers.
Typical attack path
- attacker presents a USB/Bluetooth HID device with a long-format HID_GLOBAL_ITEM_TAG_REPORT_SIZE descriptor
- kernel invokes hid_scan_report() which calls fetch_item() and stores the long item pointer
- item_udata()/item_sdata() misinterprets the pointer as an integer and emits the value to the kernel log
- attacker reads dmesg or /var/log/kern.log to obtain a kernel address for subsequent exploitation
How to detect it
Search kernel logs (dmesg, /var/log/kern.log, journalctl) for the exact phrase "invalid report_size" followed by a decimal number that resembles a truncated kernel pointer; correlate with recent USB or Bluetooth HID device connection events.
- invalid report_size [0-9]{8,}
- hid (null): invalid report_size
What your security team should do
- Prioritize kernel updates on all Linux endpoints that accept arbitrary HID devices
- Add kernel log monitoring rules for the string "invalid report_size" followed by an anomalous numeric value
- Enforce USB device allow-listing for high-risk workstations until patches are deployed
The record
In the Linux kernel, the following vulnerability has been resolved: HID: core: fix number/pointer type confusion on long items When fetch_item() is called by hid_scan_report() on an item with HID_ITEM_TAG_LONG, it stores a pointer to the item data in item->data.longdata instead of storing a value directly in item->data.{u8/u16/u32}. When item_udata() or item_sdata() encounters such an item, it incorrectly assumes that the item is in short format, and therefore returns the lower part of a kernel pointer reinterpreted as a number. When a HID device is connected whose descriptor contains a HID_GLOBAL_ITEM_TAG_REPORT_SIZE encoded in long format with size=4, this causes the lower half of a kernel pointer to be printed into dmesg as a number, like this: hid (null): invalid report_size 107953555 To fix it, let item_udata() and item_sdata() verify that the item is in short format. Note that this bug only affects hid_scan_report(), while the main parsing pass hid_parse_collections() will always bail out when encountering a long item. Sidenote: There are currently no users of data.longdata; maybe we should just remove any parsing of long-format descriptors as a follow-up.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|