CVE-2026-80781

HID: core: fix OOB read of field->usage in hid_set_field()

State
Published
Severity
Not scored
Published
Sep 4, 2026
Updated
Oct 19, 2026
Reserved
Aug 26, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

HID: core: fix OOB read of field->usage in hid_set_field()

hid_set_field() hands field->usage + offset to hid_dump_input() before the guard that bounds offset:

hid_dump_input(field->report->device, field->usage + offset, value);

if (offset >= field->report_count) { hid_err(...); return -1; }

Under CONFIG_DEBUG_FS hid_dump_input() dereferences that pointer, with buf = hid_resolv_usage(usage->hid, NULL). The usage[] array is allocated inline with the hid_field in hid_register_field() and holds field->maxusage entries, so an offset past it reads off the end of the kvzalloc()ed allocation and into a neighbouring object. Had the guard run first, offset < report_count <= maxusage would already have confined the pointer to the array.

A caller supplies such an offset today. picolcd_fb_send_tile() validates only report->maxfield before issuing hid_set_field(report->field[0], 11 + i, ...) for i = 0..31, so its offsets are fixed at 11..42 and are never checked against the bound field. When the device registers that field with fewer usages, the framebuffer deferred-io work drives the read on every tile. KASAN reports a 4-byte slab-out-of-bounds read in hid_dump_input() below hid_set_field(), and the same boot logs "offset (1) exceeds report_count (1)" from the guard that runs only afterwards.

Move the hid_dump_input() call below the guard. Because field->maxusage >= field->report_count, the guard then establishes that field->usage + offset lies inside the array before it is dereferenced, for every caller and without changing behaviour on the valid path.

Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 465544b3d6602cfbdc2305d5cbfb7f4954353b63Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 4993e1ab85d7d3f4a40d81852170f9665483bbd8Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 313ead1abed945544703b100a12c5a10fdf78409Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before c1d9c16af51cc6ff92a5a062617d3b022dd01078Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before a38212687519f2a72f43e62dec1348a690412404Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 9a1d7c5f0d82e8665715d5e47c9410c6a97e3748Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before 5215ea00a747eca34cb2f603cfef91fef76c2558Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before cbcc0e8dea499e5ca86b583372ccb1815cccc570Affected
  • 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 to before a13cdb19fcb223ed41bdab3bab42b98dba87e90bAffected
LinuxLinux
  • 2.6.12Affected
  • before 2.6.12Not affected
  • 5.10.267 through 5.10.*Not affected
  • 5.15.218 through 5.15.*Not affected
  • 6.1.185 through 6.1.*Not affected
  • 6.6.154 through 6.6.*Not affected
  • 6.12.106 through 6.12.*Not affected
  • 6.18.47 through 6.18.*Not affected
  • 7.1.11 through 7.1.*Not affected
  • 7.2.1 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.