В ядре Linux устранена следующая уязвимость:
bpf: возьмите mmap_lock в zap_pages()
zap_vma_range() требует сохранения mmap_lock владельца mm. Использование mmap_read_lock в разделе Arena->lock приведет к нарушению AB-BA.
arena_vm_close() и arena_map_mmap(), оба из которых запускаются с
mmap_write_lock удерживается, а затем получает Arena->lock. Вместо этого отбросьте
arena->lock, mmget_not_zero() мм vma, возьмите mmap_read_lock и
повторно разрешите vma с помощью find_vma(), поскольку она могла быть не сопоставлена или
заменил пока жду.
Отслеживайте обработанные виртуальные файлы с помощью генерации для каждого вызова в vml->zap_gen и
сериализовать вызывающие программы zap_pages() с новой ареной->zap_mutex, поэтому
одновременные вызовы в разных диапазонах uaddr не отмечают друг друга
vmls обрабатываются до завершения zap.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: bpf: Take mmap_lock in zap_pages() zap_vma_range() requires the owning mm's mmap_lock to be held. Taking mmap_read_lock under arena->lock would AB-BA against arena_vm_close() and arena_map_mmap(), both of which run with mmap_write_lock held and then acquire arena->lock. Instead drop arena->lock, mmget_not_zero() the vma's mm, take mmap_read_lock, and re-resolve the vma via find_vma() since it may have been unmapped or replaced while waiting. Track processed vmls with a per-call generation in vml->zap_gen and serialize zap_pages() callers with a new arena->zap_mutex so concurrent callers on different uaddr ranges do not mark each other's vmls processed before the zap is done.
Характеристики атаки
Последствия
Строка CVSS v3.1