В ядре Linux устранена следующая уязвимость: mm/pagewalk: исправить гонку между параллельным расколом и refault Расщепление PUD-записка в w…
В ядре Linux устранена следующая уязвимость: mm/pagewalk: исправить гонку между параллельным расколом и refault Расщепление PUD-записка в walk_pud_range() может участвовать в гонках с параллельная нить, изменяющая вход листа PUD, заставляя его попробовать ходить Диапазон PMD, который исчез. Пример и воспроизведение этого - попробовать прочитать numa_maps of a процесс, пока VFIO-PCI настраивает DMA (в частности, vfio_pin_pages_remote call) на большой BAR для этого процесса. Это вызовет ядро BUG: vfio-pci 0000:03:00.0: Включающее устройство (0000 -> 0002) BUG: неспособность справиться с ошибкой страницы для адреса: ffffa2398000000 ПГД 0 P4D 0 Упс: Упс: 0000 [#1] SMP NOPTI ... RIP: 0010:walk_pgd_range+0x3b5/0x7a0 Код: 8d 43 ff 48 89 44 24 28 4d 89 ce 4d 8d a7 00 00 00 48 8b 4c 24 28 49 81 e4 00 00 00 ff 49 8d 44 24 ff 48 39 c8 4c из 43 e3 <49> f7 06 9f ff ff ff ff 75 3b 48 8b 44 24 20 48 8b 40 28 48 85 c70 74 РСП: 0018:ffac23e1ecf808 ФЛАГИ: 00010287 RAX: 00007f44c01ffff RBX: 0007f45000000 RCX: 00007f44ffffff RDX: 000000000000 RSI: 000ффффффффф.000: ffffffffff93378fe0 РУП: ffffac23e1ecf918 R08: 00000000000004 R09: fffffa2398000000 R10: 00000000000020 R11: 00000000000004 R12: 00007f44c00000000 R13: 0007f44c000000 R14: fffffa2398000000 R15: 0007f44c000000 ФС: 00007fe884739580(0000) ГСФФ9б7д7д9c0000(0000) knlGS:00000000000000000 КСС: 0010 ДС: 0000 ЭС: 0000 КР0: 00000080050033 CR2: fffffa239800000000 CR3: 000000c0650e2005 CR4: 0000000000770ef0 PKRU: 55555554 Трейс по вызову: <TASK> __walk_page_range+0x195/0x1b0 walk_page_vma+0x62/0xc0 show_numa_map+0x12b/0x3b0 seq_read_iter+0x297/0x440 seq_read+0x11d/0x140 vfs_read+0xc2/0x340 ksys_read+0x5f/0xe0 do_syscall_64+0x68/0x130 ? get_page_from_freelist+0x5c2/0x17e0 ? mas_store_prealloc+0x17e/0x360 ? vma_set_page_prot+0x4c/0xa0 ? __alloc_pages_noprof+0x14e/0x2d0 ? __mod_memcg_lruvec_state+0x8d/0x140 ? __lruvec_stat_mod_folio+0x76/0xb0 ? ___folio_mod_stat+0x26/0x80 ? do_anonymous_page+0x705/0x900 ? __handle_mm_fault+0xa8d/0x1000 ? __count_memcg_events+0x53/0xf0 ? ручка_mm_fault+0xa5/0x360 ? do_user_addr_fault+0x342/0x640 ? arch_exit_to_user_mode_prepare.constprop.0+0x16/0xa0 ? irqentry_exit_to_user_mode+0x24/0x100 вход_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7fe88464f47e Код: c0 e9 b6 fe ff 50 48 8d 3d be 07 0b 00 e8 01 02 00 66 00 1f 84 00 00 00 00 00 00 00 00 00 00 04 25 18 00 00 85 c0 75 14 0ч 4ч <48> 3д 00 f0 ff ff 77 5a c3 66 0f 1f 84 00 00 00 00 00 48 83 ec 28 RSP: 002b:00007ffe6cd9b8 ФЛАГЫ: 00000246 ORIG_RAX: 000000000000 RAX: ffffffffffffda RBX: 00000000000000 RCX: 00007fe88464f47e RDX: 000000000000 RSI: 00007fe884543000 RDI: 00000000000003 РУП: 00007fe884543000 R08: 00007fe8845422010 R09: 000000000000 R10: fffffffffffbc5 R11: 0000000000000246 R12: 000000000000000000 R13: 00000000000003 R14: 000000000000 R15: 000000000000 </ТАСКА" Исправьте это, проверив вход PUD в walk_pmd_range() с помощью стабильного Снимок (pudp_get()). Если PUD отсутствует или является листом, попробуйте Прогулка через ACTION_AGAIN вместо того, чтобы спускаться дальше. Это отражает повторная попытка логики в walk_pte_range(), которая позволяет walk_pmd_range() повторить, если PTE не попадает на pte_offset_map_lock().
Продукт содержит параллельную последовательность кода, требующую временного монопольного доступа к разделяемому ресурсу, однако существует временно́е окно, в течение которого этот ресурс может быть изменён другой параллельно выполняемой последовательностью кода.
https://cwe.mitre.org/data/definitions/362.html →Открыть в коллекции CWE →Злоумышленник нацеливается на состояние гонки, возникающее когда несколько процессов одновременно обращаются к одному ресурсу и манипулируют им, а результат выполнения зависит от конкретного порядка этих обращений. Злоумышленник может эксплуатировать состояние гонки, «участвуя в гонке»: изменяя ресурс и нарушая нормальный порядок выполнения. Например, состояние гонки может возникнуть при обращении к файлу: злоумышленник может обмануть систему, подменив исходный файл своей версией и заставив систему прочитать вредоносный файл.
https://capec.mitre.org/data/definitions/26.html →Открыть в коллекции CAPEC →Данная атака нацелена на состояние гонки, возникающее между моментом проверки (состояния) ресурса и моментом его использования. Типичный пример — обращение к файлу. Злоумышленник может эксплуатировать состояние гонки при обращении к файлу, «участвуя в гонке»: изменяя ресурс между первым обращением целевой программы к файлу и фактическим его использованием. В этом промежутке злоумышленник может заменить или изменить файл, вызвав неожиданное поведение приложения.
https://capec.mitre.org/data/definitions/29.html →Открыть в коллекции CAPEC →| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux_kernel | * | Отслеживается |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается | |
| kernel-headers-pine | Отслеживается | |
| kernel-headers-pine | Отслеживается | |
| kernel-image-6.18 | Отслеживается | |
| kernel-image-6.18 | Отслеживается | |
| kernel-image-6.18-checkinstall | Отслеживается | |
| kernel-image-6.18-checkinstall | Отслеживается | |
| kernel-image-pine | Отслеживается |