Ad

CVE-2026-89579

HIGH CVSS 3.1: 7,8 EPSS 0.17%
Обновлено 14 сентября 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: bpf: усиление определения размера и индексации фильтра Блума в 32-битных ядрах. Bloom_map_alloc() имеет две проблемы, характерные для 32-разрядных систем, когда вычисляется растровое изображение достигает резервного варианта U32_MAX. Сначала BITS_TO_BYTES(U32_MAX) оценивается с помощью 32-битной арифметики. добавление, выполняемое с помощью переносов DIV_ROUND_UP, поэтому карта выделяет только объект фильтра Блума фиксированного размера, сохраняя при этом bitset_mask == U32_MAX. Последующие обновления могут затем записывать выделенный объект.

Во-вторых, фиксирования только размера распределения недостаточно. Цветущий хэш это u32, но set_bit() принимает длинный бит со знаком и x86 test_bit() в конечном итоге передает индекс в переменную_test_bit(long, ...). На 32-битной версии ядра, хеши в [0x80000000, U32_MAX], поэтому становятся отрицательным битом смещения. x86 bt/bts с операндом памяти интерпретируют эти смещения относительно к предоставленной базе, поэтому карта с bitset_mask == U32_MAX может читать или напишите перед цветением->bitset даже после выделения полного растрового изображения размером 512 МБ.

Сохраните запасной вариант U32_MAX, но разделите каждый хэш на указатель слова и номер бита в слове перед вызовом test_bit() или set_bit(). Битопсы аргумент тогда всегда находится в [0, BITS_PER_LONG - 1], а BIT_WORD(h) по-прежнему выбирает нужное слово в полном растровом изображении. Вычислите размер набора битов из (u64)bitset_mask + 1 перед передачей финального значения. размер в bpf_map_area_alloc().

Это исправляет исходное недостаточное распределение и сохраняет выделенное хранилище в соответствии с адресным набором битов. Примечание по эксплуатации: локальное повышение привилегий возможно на 32-битной системе x86. ядро, использующее ошибку недостаточного распределения памяти из двоичного файла с CAP_BPF.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: bpf: Harden bloom filter sizing and indexing on 32-bit kernels bloom_map_alloc() has two 32-bit-specific problems when the computed bitmap reaches the U32_MAX fallback case. First, BITS_TO_BYTES(U32_MAX) is evaluated with 32-bit arithmetic. The addition performed by DIV_ROUND_UP wraps, so the map allocates only the fixed-size bloom filter object while keeping bitset_mask == U32_MAX. Subsequent updates can then write past the allocated object. Second, fixing only the allocation size is not sufficient. The bloom hash is a u32, but set_bit() takes a signed long bit number and x86 test_bit() eventually feeds the index to variable_test_bit(long, ...). On 32-bit kernels, hashes in [0x80000000, U32_MAX] therefore become negative bit offsets. x86 bt/bts with a memory operand interpret those offsets relative to the supplied base, so a map with bitset_mask == U32_MAX can read or write before bloom->bitset even after allocating the full 512 MiB bitmap. Keep the U32_MAX fallback, but split each hash into a word pointer and an in-word bit number before calling test_bit() or set_bit(). The bitops argument is then always in [0, BITS_PER_LONG - 1], while BIT_WORD(h) still selects the intended word in the full bitmap. Compute the bitset size from (u64)bitset_mask + 1 before passing the final size to bpf_map_area_alloc(). This fixes the original under-allocation and keeps the allocated storage consistent with the addressable bitset. Exploitation note: local privilege escalation is possible on a 32-bit x86 kernel using the under-allocation bug from a binary with CAP_BPF.

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1