CVE-2026-63949

auxdisplay: line-display: fix OOB read on zero-length message_store()

State
Published
Severity
Not scored
Published
Jul 19, 2026
Updated
Jul 19, 2026
Reserved
Jul 19, 2026

Read the record on cve.org

Description

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

auxdisplay: line-display: fix OOB read on zero-length message_store()

linedisp_display() unconditionally reads msg[count - 1] before checking whether count is zero, so a write of zero bytes to the message sysfs attribute hits msg[-1]:

write(fd, "", 0);

-> message_store(..., buf, count=0) -> linedisp_display(linedisp, buf, count=0) -> msg[count - 1] == '\n' ; OOB read

The kernfs write buffer for that store is a 1-byte allocation (kernfs_fop_write_iter() does kmalloc(len + 1) with len == 0), so msg[-1] is a 1-byte read before the slab object. On a KASAN-enabled kernel this trips an out-of-bounds report and panics; on stock kernels it silently reads adjacent slab data and, if that byte happens to be '\n', the following count-- wraps ssize_t 0 to -1 and is then passed to kmemdup_nul().

linedisp_display() is reached from the message_store() sysfs callback (drivers/auxdisplay/line-display.c message attribute, mode 0644) and from the in-tree initial-message setup with count == -1, so the OOB path is only userspace-triggerable via zero-byte writes; vfs_write() does not short-circuit on count == 0 and kernfs_fop_write_iter() dispatches the store callback regardless.

Guard the trailing-newline trim with a count check. The existing if (!count) block then takes the clear-display path unchanged.

Affects every auxdisplay driver that registers via linedisp_register() / linedisp_attach(): ht16k33, max6959, img-ascii-lcd, seg-led-gpio.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before ca5b0781946d5083ceafa752141f47f085853620Affected
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before 8776032fe989a9b5fc77f2de5e03e4adb44c630eAffected
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before 3859960daeb9b7b39b9847b5b0113bc6081eb735Affected
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before 197476b126010bac1b3199833c6966cd6f54c2a9Affected
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before 6ad4f75ef9f3372fce8cad494e789ac6a5507befAffected
  • 7e76aece6f036cb7ada4858d6aa73825bfe22983 to before a7511dcd9dd4bc55d123f9b800c8a4ed2662e5c6Affected
LinuxLinux
  • 5.16Affected
  • before 5.16Not affected
  • 6.1.176 through 6.1.*Not affected
  • 6.6.143 through 6.6.*Not affected
  • 6.12.93 through 6.12.*Not affected
  • 6.18.35 through 6.18.*Not affected
  • 7.0.12 through 7.0.*Not affected
  • 7.1 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.