CVE-2026-98254 in Linux
Сводка
по VulDB • 06.10.2026
В ядре Linux была устранена следующая уязвимость:
swiotlb: использовать скорректированный адрес для поиска страницы highmem
Функция swiotlb_bounce() считывает номер кадра страницы (PFN) из записанного в слоте orig_addr, а затем увеличивает значение orig_addr на tlb_offset, чтобы получить адрес, о котором запросил вызывающий. В ветке highmem происходит смешивание этих двух значений: смещение внутри страницы берется из скорректированного адреса, а сама страница — из исходного значения до корректировки.
Как только корректировка пересекает границу страницы, эта пара больше не описывает одно и то же место в памяти, и вся операция копирования попадает на страницу ниже ожидаемой при положительном tlb_offset или выше нее при отрицательном значении. При DMA_FROM_DEVICE данные устройства записываются в неправильную страницу, а предполагаемая страница остается устаревшей (stale). При DMA_TO_DEVICE устройство считывает данные со страницы, которая может не покрываться отображением. Частичные синхронизации через dma_sync_single_range_for_*() являются причиной того, что tlb_offset становится отличным от нуля.
Проверка ветки выполняется аналогичным образом, поэтому слот, записанный в lowmem, может быть скорректирован так, чтобы указывать на highmem, и путь lowmem затем передает адрес highmem функции phys_to_virt().
Необходимо брать оба значения из orig_addr после того, как оно станет окончательным, а PFN оставить в ветке, которая его использует. Функция PhysHighMem() задает вопрос напрямую исходя из адреса, аналогично тому, как это уже делает dma-debug.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.