В ядре Linux устранена следующая уязвимость: HID: appletb-kbd: запустите бездействие autodim из рабочих очередей Код autodim в hid-appletb-…
В ядре Linux устранена следующая уязвимость: HID: appletb-kbd: запустите бездействие autodim из рабочих очередей Код autodim в hid-appletb-kbd принимает backlight_device->ops_lock через backlight_device_set_brightness() -> mutex_lock() из двух Различные атомные контексты: * appletb_inactivity_timer() - это стрвенька вызова таймера_списка, поэтому она Работает в мягком контексте. Каждый срок годности BUG: функция сна, называемая из недействительного контекста на ядрое/locking/mutex.c:591 Трейс по вызову: <IRQ> __might_resched __mutex_lock backlight_device_set_brightness appletb_inactivity_timer call_timer_fn run_timer_softirq * reset_inactivity_timer() называется apletb_kbd_hid_event() и appletb_kbd_inp_event(). На реальном USB оборудовании они запускаются в Контекст softirq/IRQ (URB-завершение и отправка входного события). Когда Touch Bar уже потускнел или выключен, Сброс пути вызова backlight_device_set_brightness() непосредственно на Восстановить яркость, производя то же предупреждение. Оба сайта вызова попадают в один и тот же mutex_lock()-от-атомный баг. Исправить их вместе, переместив блокировочную работу на системную рабочую очередь: * Преобразование таймера бездействия из structer_list в structed down_work; обратный звонок (appletb_inactivity_work) сейчас работает в контексте процесса, где mutex_lock() является законным. * Добавить выделенную структурную работу_structировать restore_brightness_work и иметь reset_inactivity_timer() запланируйте его вместо того, чтобы звонить backlight_device_set_brightness() напрямую. Отменить оба работает синхронно во время сноса водителя вместе с Существующая эталонная капля задних фонарей. Семантика неизменна (те же задержки, те же переходы состояния на тусклый, выключающий и пользовательская активность); только контекст исполнения Снотворные звонки меняются. Поле таймера и обратного вызова переименовываются в match их новый тип; reset_inactivity_timer() сохраняет свое имя, потому что он вызывается из входных путей события, которые гласят естественным образом как «сброс» таймер бездействия».
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux_kernel | * | Отслеживается |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-6.18 | Отслеживается | |
| kernel-doc-7.0 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-6.18 | Отслеживается | |
| kernel-headers-7.0 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-6.18 | Отслеживается | |
| kernel-headers-modules-7.0 | Отслеживается | |
| kernel-headers-modules-pine | Отслеживается | |
| kernel-headers-pine | Отслеживается | |
| kernel-image-6.18 | Отслеживается | |
| kernel-image-6.18 | Отслеживается | |
| kernel-image-6.18-checkinstall | Отслеживается | |
| kernel-image-6.18-checkinstall | Отслеживается |