В ядре Linux устранена следующая уязвимость:
mm/kmemleak: избежать мягкой блокировки в __kmemleak_do_cleanup()
Предупреждение о мягкой блокировке наблюдалось в относительно небольшой системе x86-64.
система с 16 ГБ памяти при запуске отладочного ядра с помощью kmemleak
включен.
сторожевой таймер: ОШИБКА: мягкая блокировка — процессор №8 завис на 33 секунды! [kworker/8:1:134]
Тестовая система выполняла рабочую нагрузку, в ходе которой происходило горячее отключение.
параллельно. Тогда kemleak решил отключиться из-за своей неспособности
выделить больше объектов kmemleak. Ядро отладки имеет
CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE установлено на 40 000.
Мягкая блокировка произошла в kmemleak_do_cleanup(), когда существующий
Объекты kmemleak удалялись и удалялись один за другим в цикле через
рабочая очередь. В данном конкретном случае имеется не менее 40 000 объектов.
которые необходимо обработать, учитывая медлительность ядра отладки и
тот факт, что raw_spinlock должен быть получен и выпущен в
__delete_object(), правильная обработка всего этого может занять некоторое время.
объекты. Поскольку в этом случае kmemleak отключен, удаление объектов и
процесс удаления можно дополнительно оптимизировать, поскольку блокировка на самом деле не требуется.
Однако, вероятно, не стоит тратить усилия на оптимизацию для такого преимущества.
случай, который должен случаться редко. Итак, простое решение - позвонить
cond_resched() через периодический интервал в цикле итерации, чтобы избежать мягкого
блокировка.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: mm/kmemleak: avoid soft lockup in __kmemleak_do_cleanup() A soft lockup warning was observed on a relative small system x86-64 system with 16 GB of memory when running a debug kernel with kmemleak enabled. watchdog: BUG: soft lockup - CPU#8 stuck for 33s! [kworker/8:1:134] The test system was running a workload with hot unplug happening in parallel. Then kemleak decided to disable itself due to its inability to allocate more kmemleak objects. The debug kernel has its CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE set to 40,000. The soft lockup happened in kmemleak_do_cleanup() when the existing kmemleak objects were being removed and deleted one-by-one in a loop via a workqueue. In this particular case, there are at least 40,000 objects that need to be processed and given the slowness of a debug kernel and the fact that a raw_spinlock has to be acquired and released in __delete_object(), it could take a while to properly handle all these objects. As kmemleak has been disabled in this case, the object removal and deletion process can be further optimized as locking isn't really needed. However, it is probably not worth the effort to optimize for such an edge case that should rarely happen. So the simple solution is to call cond_resched() at periodic interval in the iteration loop to avoid soft lockup.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 16
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.4.1
|
5.4.297
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.5
|
5.10.241
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.11
|
5.15.190
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.16
|
6.1.149
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.2
|
6.6.103
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.7
|
6.12.43
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.13
|
6.15.11
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
6.16
|
6.16.2
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:-:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:rc4:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:rc5:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:rc6:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:rc7:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:5.4:rc8:*:*:*:*:*:*
|
— | — |
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:6.17:rc1:*:*:*:*:*:*
|
— | — |
|
Debian Debian_Linux
cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:*
|
— | — |