CVE-2026-80575

CVE-2026-80575

High · published August 26, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
6.7
In the wild
Unconfirmed
What it is

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

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

cs40l50_add() copies the custom data of an FF_PERIODIC/FF_CUSTOM effect

straight from the ff_effect 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: custom_data[0] as the

waveform bank in cs40l50_effect_bank_set(), and custom_data[1] as the

index within the bank in cs40l50_effect_index_set(). Neither read is

covered by a length check, and custom_len is fully user controlled:

- custom_len == 0 makes memdup_array_user() call memdup_user() with a

length of zero, which returns ZERO_SIZE_PTR rather than an error, so

custom_data[0] dereferences it.

- custom_len == 1 allocates two bytes. A bank of ROM or RAM keeps

effect->type out of the OWT case, and custom_data[1] is then read one

word past the allocation.

The bank value itself is also mishandled. It is masked with

CS40L50_CUSTOM_DATA_MASK (0xffff) but stored in an s16, so a

custom_data[0] of 0x8000 or above wraps to a negative value that passes

the "bank_type >= CS40L50_WVFRM_BANK_NUM" test.

cs40l50_effect_index_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.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00175 · 6.7th percentile
Published
2026-08-26T19:17Z
References (4)
EPSS history
Timeline
  • 28 AUG 06:54Z
    EPSS moved — → 0%
    epss
  • 26 AUG 14:37Z
    Input: cs40l50-vibra - validate custom data from user space
    cvelistv5