CVE-2026-80575

Source
https://cve.org/CVERecord?id=CVE-2026-80575
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80575.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-80575
Downstream
Published
2026-08-26T14:37:34.942Z
Modified
2026-08-28T03:47:28.891075674Z
Severity
  • 7.8 (High) CVSS_V3 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
Input: cs40l50-vibra - validate custom data from user space
Details

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

Input: cs40l50-vibra - validate custom data from user space

cs40l50add() copies the custom data of an FFPERIODIC/FFCUSTOM effect straight from the ffeffect the user passed to EVIOCSFF, without requiring it to hold anything:

work_data.custom_data = memdup_array_user(periodic->custom_data,
                                          periodic->custom_len,
                                          sizeof(s16));
work_data.custom_len = periodic->custom_len;

The driver then reads two words out of that buffer: customdata[0] as the waveform bank in cs40l50effectbankset(), and customdata[1] as the index within the bank in cs40l50effectindexset(). Neither read is covered by a length check, and custom_len is fully user controlled:

  • customlen == 0 makes memduparrayuser() call memdupuser() with a length of zero, which returns ZEROSIZEPTR rather than an error, so custom_data[0] dereferences it.

  • customlen == 1 allocates two bytes. A bank of ROM or RAM keeps effect->type out of the OWT case, and customdata[1] is then read one word past the allocation.

The bank value itself is also mishandled. It is masked with CS40L50CUSTOMDATAMASK (0xffff) but stored in an s16, so a customdata[0] of 0x8000 or above wraps to a negative value that passes the "banktype >= CS40L50WVFRMBANKNUM" test. cs40l50effectindex_set() indexes vib->dsp.banks[] with it before the switch statement's default case gets a chance to reject it:

base_index = vib->dsp.banks[effect->type].base_index;
max_index = vib->dsp.banks[effect->type].max_index;

Require the two words the driver reads to be present, and hold the masked bank in a u32 so the existing upper-bound test covers the whole range. The da7280 haptic driver already range checks custom_len this way.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/80xxx/CVE-2026-80575.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
c38fe1bb5d21c2ce0857965ee06174ee587d6b42
Fixed
3855b6a11f8a7aceb8181cc08c99afef58517006
Fixed
52a818c586ae2c36b7324bfaefb547f5e866a8ae
Fixed
d38554602a0b04e85fad28ce72c7500cf50d419b
Fixed
7d5c576cb1c86047b1fcb1aa9532e17fc5e46c1d

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80575.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.11.0
Fixed
6.12.105
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.46
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.1.10

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-80575.json"