В ядре Linux устранена следующая уязвимость:
drm/rockchip: inno-hdmi: переключиться на drmm_kzalloc()
Драйвер использует drmm_encoder_init() для инициализации кодировщика и
автоматически выполнять очистку, регистрируя drm_encoder_cleanup()
с помощью drmm_add_action(). Однако внутренняя структура, содержащая часть кодера, становится
выделяется с помощью devm_kzalloc(), что происходит, пока компонент_bind_all()
вызывается из драйвера Rockchip DRM. Компонентная структура
дополнительно гарантирует его освобождение в рамках освобождения всех ресурсов.
заявлено во время привязки, которая запускается из компонент_unbind_all().
Когда ссылка на устройство DRM в конечном итоге удаляется через
drm_dev_put() в rockchip_drm_unbind(), drmm_encoder_alloc_release()
пытается получить доступ к теперь выпущенной структуре кодировщика, что приводит к
использовать после бесплатно. Убедитесь, что внутренняя структура драйвера по-прежнему доступна при очистке кодировщика.
путем переключения с распределения, управляемого устройством, на распределение, управляемое drm.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: drm/rockchip: inno-hdmi: Switch to drmm_kzalloc() Driver makes use of drmm_encoder_init() to initialize the encoder and automatically handle the cleanup by registering drm_encoder_cleanup() with drmm_add_action(). However, the internal structure containing the encoder part gets allocated with devm_kzalloc(), which happens while component_bind_all() is being called from Rockchip DRM driver. The component framework further ensures it is deallocated as part of releasing all the resources claimed during bind, which is triggered from component_unbind_all(). When the reference to the DRM device gets eventually dropped via drm_dev_put() in rockchip_drm_unbind(), drmm_encoder_alloc_release() attempts to access the now released encoder structure, leading to use-after-free. Ensure driver's internal structure is still reachable on encoder cleanup by switching from a device-managed allocation to a drm-managed one.