В ядре Linux устранена следующая уязвимость: uacce: обеспечить безопасное освобождение очереди с помощью управления состоянием Прямой вызов put_queue несет в себе риск, поскольку он не может гарантировать, что ресурсы uacce_queue были полностью освобождены заранее. Поэтому добавление операции `stop_queue` для UACCE_CMD_PUT_Q и оставив операцию `put_queue` окончательное высвобождение ресурсов обеспечивает безопасность. Состояния очереди определяются следующим образом: - UACCE_Q_ZOMBIE: исходное состояние - UACCE_Q_INIT: после открытия uacce. - UACCE_Q_STARTED: после запуска `start` через `ioctl` При выполнении `poweroff -f` в virt, когда ускоритель все еще включен. работает, `uacce_fops_release` и `uacce_remove` могут выполняться одновременно. Это может вызвать `uacce_put_queue` внутри `uacce_fops_release` для доступа к NULL указателю `ops`. Поэтому добавьте проверки состояния для предотвращения доступа к освобожденным указателям.
Показать оригинальное описание (английский)
In the Linux kernel, the following vulnerability has been resolved: uacce: ensure safe queue release with state management Directly calling `put_queue` carries risks since it cannot guarantee that resources of `uacce_queue` have been fully released beforehand. So adding a `stop_queue` operation for the UACCE_CMD_PUT_Q command and leaving the `put_queue` operation to the final resource release ensures safety. Queue states are defined as follows: - UACCE_Q_ZOMBIE: Initial state - UACCE_Q_INIT: After opening `uacce` - UACCE_Q_STARTED: After `start` is issued via `ioctl` When executing `poweroff -f` in virt while accelerator are still working, `uacce_fops_release` and `uacce_remove` may execute concurrently. This can cause `uacce_put_queue` within `uacce_fops_release` to access a NULL `ops` pointer. Therefore, add state checks to prevent accessing freed pointers.