Ad

CVE-2026-89436

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

В ядре Linux устранена следующая уязвимость: платформа/x86: panasonic-laptop: исправлена ошибка записи дозорного после pcc->sinf[] acpi_pcc_retrieve_biosdata() отклоняет пакеты SINF только тогда, когда pcc->num_sifr строго меньше, чем hkey->package.count, тогда безоговорочно записывает конечный дозорный в pcc->sinf[hkey->package.count]. Но pcc->sinf[] выделяется с ровно элементы pcc->num_sifr (допустимые индексы 0..num_sifr-1), так что для записи требуется, чтобы num_sifr строго превышал package.count, чтобы оставаться внутри границы -- num_sifr == package.count проходит существующую проверку, но все равно переполняется на один элемент. Это как раз тот случай, когда существует обходной путь num_sifr++ для зонда(). («Некоторые DSDT-ы имеют ошибку с отклонением на единицу, из-за которой количество пакетов SINF на единицу больше, чем заявленное значение SQTY") записывается с учетом: когда количество пакетов SINF DSDT равно SQTY+1, обходной путь делает num_sifr равен package.count, что и является границей, здесь переливается.

Найдено через UBSan (индекс массива за пределами границ) на аппаратное обеспечение, где HKEY.SQTY возвращает 37, а пакет HKEY.SINF() имеет 38 элементы: num_sifr становится 38 после обходного пути += 1, цикл правильно заполняет индексы 0..37, а затем направляет запись дозорного индекс 38, один за концом — тихое переполнение 4-байтовой кучи в ядрах без CONFIG_UBSAN. Ужесточение проверки отклонения до num_sifr <= package.count приведет избегайте переполнения, но полностью прерывает функцию зонда() именно в этом случае аппаратное обеспечение, поскольку num_sifr == package.count — это случай отклонения на единицу существует обходной путь для поддержки. Больше ничего в драйвере это не читает значение дозорного обратно, поэтому просто пропустите запись, когда нет места вместо этого.

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

In the Linux kernel, the following vulnerability has been resolved: platform/x86: panasonic-laptop: Fix sentinel write past pcc->sinf[] acpi_pcc_retrieve_biosdata() rejects SINF packages only when pcc->num_sifr is strictly less than hkey->package.count, then unconditionally writes a trailing sentinel at pcc->sinf[hkey->package.count]. But pcc->sinf[] is allocated with exactly pcc->num_sifr elements (valid indices 0..num_sifr-1), so that write needs num_sifr strictly greater than package.count to stay in bounds -- num_sifr == package.count passes the existing check but still overflows by one element. This is exactly the case probe()'s existing num_sifr++ workaround ("Some DSDT-s have an off-by-one bug where the SINF package count is one higher than the SQTY reported value") is written to accommodate: when a DSDT's SINF package count equals SQTY+1, the workaround makes num_sifr equal to package.count, which is precisely the boundary that overflows here. Found via UBSan (array-index-out-of-bounds) on hardware where HKEY.SQTY returns 37 and HKEY.SINF()'s package has 38 elements: num_sifr becomes 38 after the += 1 workaround, the loop correctly fills indices 0..37, and the sentinel write then targets index 38, one past the end -- a silent 4-byte heap overflow on kernels without CONFIG_UBSAN. Tightening the rejection check to num_sifr <= package.count would avoid the overflow but breaks probe() entirely on exactly this hardware, since num_sifr == package.count is the case the off-by-one workaround exists to support. Nothing else in the driver reads this sentinel value back, so simply skip the write when there is no room for it instead.

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

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

Последствия

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

Строка CVSS v3.1