CVE-2026-80575
Gravedad CVSS v3.1:
ALTA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
26/08/2026
Última modificación:
27/08/2026
Descripción
*** Pendiente de traducción *** In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
Input: cs40l50-vibra - validate custom data from user space<br />
<br />
cs40l50_add() copies the custom data of an FF_PERIODIC/FF_CUSTOM effect<br />
straight from the ff_effect the user passed to EVIOCSFF, without<br />
requiring it to hold anything:<br />
<br />
work_data.custom_data = memdup_array_user(periodic->custom_data,<br />
periodic->custom_len,<br />
sizeof(s16));<br />
work_data.custom_len = periodic->custom_len;<br />
<br />
The driver then reads two words out of that buffer: custom_data[0] as the<br />
waveform bank in cs40l50_effect_bank_set(), and custom_data[1] as the<br />
index within the bank in cs40l50_effect_index_set(). Neither read is<br />
covered by a length check, and custom_len is fully user controlled:<br />
<br />
- custom_len == 0 makes memdup_array_user() call memdup_user() with a<br />
length of zero, which returns ZERO_SIZE_PTR rather than an error, so<br />
custom_data[0] dereferences it.<br />
<br />
- custom_len == 1 allocates two bytes. A bank of ROM or RAM keeps<br />
effect->type out of the OWT case, and custom_data[1] is then read one<br />
word past the allocation.<br />
<br />
The bank value itself is also mishandled. It is masked with<br />
CS40L50_CUSTOM_DATA_MASK (0xffff) but stored in an s16, so a<br />
custom_data[0] of 0x8000 or above wraps to a negative value that passes<br />
the "bank_type >= CS40L50_WVFRM_BANK_NUM" test.<br />
cs40l50_effect_index_set() indexes vib->dsp.banks[] with it before the<br />
switch statement&#39;s default case gets a chance to reject it:<br />
<br />
base_index = vib->dsp.banks[effect->type].base_index;<br />
max_index = vib->dsp.banks[effect->type].max_index;<br />
<br />
Require the two words the driver reads to be present, and hold the masked<br />
bank in a u32 so the existing upper-bound test covers the whole range.<br />
The da7280 haptic driver already range checks custom_len this way.
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA



