---
id: CVE-2026-89628
title: 'HID: picolcd: clamp eeprom debugfs read to bytes actually received'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  HID: picolcd: clamp eeprom debugfs read to bytes actually received

  picolcd_debug_eeprom_read() trusts resp->raw_data[2] -- a length byte
  supplied by the device in its …
severity: medium
cvss: 5.5
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'
cvssSource: vendor
cwe:
  - CWE-805
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    1a02056c2bf7ef9b5fd05ee6913aeeadb703c443
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    65daa322f1021d8206f8032c4cd4c0cb2d26c7c3
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    8dc662af019158690c470edd2e2857657f700abb
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    4daf432c94a42e7be6aa10b012b33af5ed9bc118
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    a3e6e8d7198a9f3861861520a38b673684a1062b
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    471f4a939c66d1d44aece2321807abf609fc9098
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    699a3c8b56e168ca19d12722f3f5ef1d6f4b1d84
  - >-
    Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba <
    e9c667395ac1f8024f623250b32bae4c7af9caa0
  - Linux 2.6.35
published: '2026-09-11'
updated: '2026-10-19'
sourceUpdated: '2026-10-19T08:50:00.490Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-89628'
references:
  - url: 'https://git.kernel.org/stable/c/1a02056c2bf7ef9b5fd05ee6913aeeadb703c443'
  - url: 'https://git.kernel.org/stable/c/65daa322f1021d8206f8032c4cd4c0cb2d26c7c3'
  - url: 'https://git.kernel.org/stable/c/8dc662af019158690c470edd2e2857657f700abb'
  - url: 'https://git.kernel.org/stable/c/4daf432c94a42e7be6aa10b012b33af5ed9bc118'
  - url: 'https://git.kernel.org/stable/c/a3e6e8d7198a9f3861861520a38b673684a1062b'
  - url: 'https://git.kernel.org/stable/c/471f4a939c66d1d44aece2321807abf609fc9098'
  - url: 'https://git.kernel.org/stable/c/699a3c8b56e168ca19d12722f3f5ef1d6f4b1d84'
  - url: 'https://git.kernel.org/stable/c/e9c667395ac1f8024f623250b32bae4c7af9caa0'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89628.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-89628'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2532179'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-89628'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-89628'
  - url: >-
      https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-89628.mbox
tags:
  - cve.org
  - csaf
  - vex
  - red-hat
epss: 0.0022
epssPercentile: 0.12451
ingestedAt: '2026-09-14T15:23:07.450Z'
---

## Overview

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

HID: picolcd: clamp eeprom debugfs read to bytes actually received

picolcd_debug_eeprom_read() trusts resp->raw_data[2] -- a length byte
supplied by the device in its REPORT_EE_DATA reply -- clamped only to
the caller's read() count:

	ret = resp->raw_data[2];
	if (ret > s)
		ret = s;
	if (copy_to_user(u, resp->raw_data+3, ret))

It never checks resp->raw_size, the number of bytes picolcd_raw_event()
actually copied into the 64-byte raw_data[] of the kmalloc'd struct
picolcd_pending. A device (or a spoofed picoLCD) returning a length byte
of 0xff, read with a count >= 255, makes copy_to_user() read past
raw_data[] into adjacent slab memory and return it to userspace through
the debugfs "eeprom" file:

	BUG: KASAN: slab-out-of-bounds in _copy_to_user
	Read of size 255 ... picolcd_debug_eeprom_read+0x214/0x2f0 [hid_picolcd]

The debug-dump path in the same file already validates the device length
byte against the received size before trusting it; this read does not.
The file is created S_IRUSR (root-only) and a crafted device is needed,
so it is neither unprivileged- nor remotely-triggerable.

Clamp the copy length to resp->raw_size - 3 (the payload actually
received, minus the 3-byte header), floored at 0 for short replies.

## Affected

- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 1a02056c2bf7ef9b5fd05ee6913aeeadb703c443`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 65daa322f1021d8206f8032c4cd4c0cb2d26c7c3`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 8dc662af019158690c470edd2e2857657f700abb`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 4daf432c94a42e7be6aa10b012b33af5ed9bc118`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < a3e6e8d7198a9f3861861520a38b673684a1062b`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 471f4a939c66d1d44aece2321807abf609fc9098`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < 699a3c8b56e168ca19d12722f3f5ef1d6f4b1d84`
- `Linux >= 9bbf2b98ba11d00bd73e3254e15cfe17ccaff6ba < e9c667395ac1f8024f623250b32bae4c7af9caa0`
- `Linux 2.6.35`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 7, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · no fix planned: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 7, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 9, … · updated 2026-09-18 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89628.json)
