В ядре Linux устранена следующая уязвимость:
bpf: исправлена запись OOB BPF_PROG_QUERY и обратная совместимость cgroup.
BPF_PROG_QUERY безоговорочно записывает поле query.revision в
пространство пользователя. Если пользовательское пространство передает меньшую структуру bpf_attr (например, 40
байт, который был макетом до добавления «query.revision»)
ядро выполняет запись за пределами допустимого диапазона. Исправьте это, распространив предоставленный пользователем размер атрибута «uattr_size».
вплоть до обработчиков запросов cgroup и условно пропуская запись
поле редакции в пользовательское пространство, когда предоставленный размер буфера
недостаточно.
query.revision в bpf_mprog_query структурно идентичен
Случай cgroup: позднее хвостовое поле, записанное безоговорочно.
Но опасность обратной совместимости не та же самая. Проверка минимального исторического размера выполняется для каждой команды и только для bpf_mprog_query.
обслуживает типы прикрепления, которые возникли с ревизией в структуре:
- tcx_prog_query -> BPF_TCX_INGRESS/EGRESS
- netkit_prog_query -> BPF_NETKIT_PRIMARY/PEER
tcx, netkit, поле ревизии и сам bpf_mprog_query — все это попало в
то же окно слияния v6.6 (053c8e1f235d добавлен API запроса mprog +
ревизия; tcx в e420bed02507, неткит в 35dfaad7188c). Никогда не было
было пользовательским пространством tcx/netkit BPF_PROG_QUERY, которое не знает о
ревизия.
Итак, для этих команд уже существует минимальная легитимная структура.
охватывает смещение 56-64 — здесь нельзя сломать старый двоичный файл. В отличие от cgroup: BPF_PROG_QUERY для типов подключения cgroup, поставляемых в комплекте.
2017 год; Обратная запись редакций была включена несколько лет спустя (120933984460). Это
path имеет реальную популяцию абонентов до версии.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: bpf: fix BPF_PROG_QUERY OOB write and cgroup backward compat BPF_PROG_QUERY writes back the 'query.revision' field unconditionally to userspace. If userspace passes a smaller 'bpf_attr' structure (e.g. 40 bytes, which was the layout before the addition of 'query.revision'), the kernel performs an out-of-bounds write. Fix this by propagating the user-provided attribute size 'uattr_size' down to the cgroup query handlers, and conditionally skipping writing the revision field to userspace when the provided buffer size is insufficient. query.revision in bpf_mprog_query is structurally identical to the cgroup case: a late tail field, written unconditionally. But the backward-compat hazard is not the same. The min-historical-size test is per command, and bpf_mprog_query only serves attach types that were born with revision in the struct: - tcx_prog_query -> BPF_TCX_INGRESS/EGRESS - netkit_prog_query -> BPF_NETKIT_PRIMARY/PEER tcx, netkit, the revision field, and bpf_mprog_query itself all landed in the same v6.6 merge window (053c8e1f235d added the mprog query API + revision; tcx in e420bed02507, netkit in 35dfaad7188c). There has never been a tcx/netkit BPF_PROG_QUERY userspace that doesn't know about revision. So for these commands the minimum legitimate struct already covers offset 56-64 — no old binary can be broken here. Contrast with cgroup: BPF_PROG_QUERY on cgroup attach types shipped in 2017; revision write-back was bolted on years later (120933984460). That path has a real population of pre-revision callers.
Характеристики атаки
Последствия
Строка CVSS v3.1