В ядре Linux устранена следующая уязвимость:
iommufd: избегайте блокировки внутреннего доступа во время отмены сопоставления.
iommufd_access_notify_unmap() пропускает внутренний доступ, потому что он
не иметь внешнего обратного вызова unmap для вызова. Однако текущий тест вызывает iommufd_lock_obj() перед проверкой.
является ли доступ внутренним. Если iommufd_lock_obj() завершается успешно, цикл
затем видит внутренний доступ и продолжает, минуя совпадение
iommufd_put_object(), используемый обычным путем unmap.
Это утечка
ссылка на объект, полученная функцией iommufd_lock_obj(). Сначала проверьте наличие внутреннего доступа, чтобы пропущенные записи никогда не блокировались.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: iommufd: Avoid locking internal accesses during unmap iommufd_access_notify_unmap() skips internal accesses because they do not have an external unmap callback to invoke. However, the current test calls iommufd_lock_obj() before checking whether the access is internal. If iommufd_lock_obj() succeeds, the loop then sees the internal access and continues, bypassing the matching iommufd_put_object() used by the normal unmap path. This leaks the object reference taken by iommufd_lock_obj(). Check for internal accesses first so skipped entries are never locked.