В ядре Linux устранена следующая уязвимость:
dibs: инициализировать dibs->lock в dibs_dev_alloc()
dibs->lock инициализируется функцией dibs_dev_add(), но устройство dibs может
уже принимает прерывания перед этим вызовом: запускается ism_probe()
ism_dev_init() и, следовательно, request_irq(), прежде чем он вызовет
dibs_dev_add(). На данный момент ни один клиент не может зарегистрировать dmb, поэтому
прерывание dmb не может произойти, но может произойти прерывание события GID, и
ism_handle_irq() принимает деньги->блокировку безоговорочно при входе, прежде чем это произойдет.
проверяет что-нибудь еще.
Вместо этого инициализируйте блокировку в dibs_dev_alloc(), чтобы она была действительна как
как только драйвер сможет опубликовать устройство в своем обработчике прерываний.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: dibs: initialise dibs->lock in dibs_dev_alloc() dibs->lock is initialised by dibs_dev_add(), but a dibs device can already take interrupts before that call: ism_probe() runs ism_dev_init(), and hence request_irq(), before it calls dibs_dev_add(). No client can have registered a dmb at that point, so no dmb interrupt can occur, but a GID event interrupt can, and ism_handle_irq() takes dibs->lock unconditionally on entry, before it inspects anything else. Initialise the lock in dibs_dev_alloc() instead, so that it is valid as soon as a driver can publish the device to its interrupt handler.
Характеристики атаки
Последствия
Строка CVSS v3.1