Commit e0da8a8
ALSA: control: Validate buf_len before strnlen() in snd_ctl_elem_init_enum_names()
snd_ctl_elem_init_enum_names() advances pointer p through the names
buffer while decrementing buf_len. If buf_len reaches zero but items
remain, the next iteration calls strnlen(p, 0).
While strnlen(p, 0) returns 0 and would hit the existing name_len == 0
error path, CONFIG_FORTIFY_SOURCE's fortified strnlen() first checks
maxlen against __builtin_dynamic_object_size(). When Clang loses track
of p's object size inside the loop, this triggers a BRK exception panic
before the return value is examined.
Add a buf_len == 0 guard at the loop entry to prevent calling fortified
strnlen() on an exhausted buffer.
Found by kernel fuzz testing through Xiaomi Smartphone.
Fixes: 8d44816 ("ALSA: control: add support for ENUMERATED user space controls")
Cc: [email protected]
Signed-off-by: Ziqing Chen <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Takashi Iwai <[email protected]>1 parent a1ed2ec commit e0da8a8
1 file changed
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1648 | 1648 | | |
1649 | 1649 | | |
1650 | 1650 | | |
| 1651 | + | |
| 1652 | + | |
| 1653 | + | |
| 1654 | + | |
1651 | 1655 | | |
1652 | 1656 | | |
1653 | 1657 | | |
| |||
0 commit comments