| Added |
Translation |
|
Title: Linux, Description: En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:
drm/amd/display: Corrección del manejo de dc_link NULL en la inicialización de HPD
amdgpu_dm_hpd_init() puede encontrar conectores sin un dc_link válido.
El código ya verifica dc_link para la decisión de sondeo, pero luego lo desreferencia incondicionalmente al configurar las interrupciones HPD.
Asigne dc_link con antelación y omita los conectores donde sea NULL.
Soluciona lo siguiente:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.c:940 amdgpu_dm_hpd_init()
error: previamente asumimos que 'dc_link' podría ser nulo (ver línea 931)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.c
923 /*
924 * Los conectores analógicos pueden ser conectados en caliente a diferencia de otros tipos de conectores
925 * que no soportan HPD. Solo sondee los conectores analógicos.
926 */
927 use_polling |=
928 amdgpu_dm_connector->dc_link &&
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ El parche añade esta verificación de NULL pero ojalá pueda ser eliminada
929 dc_connector_supports_analog(amdgpu_dm_connector->dc_link->link_id.id);
930
931 dc_link = amdgpu_dm_connector->dc_link;
dc_link asignado aquí.
932
933 /*
934 * Obtenga una referencia de irq del controlador base para las interrupciones hpd durante la vida útil
935 * de dm. Tenga en cuenta que solo los tipos de interrupción hpd se registran con
936 * el controlador base; los tipos hpd_rx no lo están. En otras palabras, amdgpu_irq_get/put en
937 * hpd_rx no está disponible. DM actualmente controla hpd_rx
938 * explícitamente con dc_interrupt_set()
939 */
--> 940 if (dc_link->irq_source_hpd != DC_IRQ_SOURCE_INVALID) {
^^^^^^^^^^^^^^^^^^^^^^^ Si es NULL, entonces tenemos problemas porque lo desreferenciamos aquí.
941 irq_type = dc_link->irq_source_hpd - DC_IRQ_SOURCE_HPD1;
942 /*
943 * PENDIENTE: Hay una discrepancia entre mode_info.num_hpd
944 * y lo que la BIOS informa como el número de conectores con hpd
|