The dig pointer for radeon_encoder->enc_priv is initialized in
radeon_add_atom_encoder(). An error during initialization may
leave radeon_encoder->enc_priv as NULL, leading to a NULL
pointer dereference in atombios_set_encoder_crtc_source().
Add a NULL pointer check for dig before dereferencing it,
returning early if it is NULL.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: f28cf33945cc ("drm/kms/radeon: pick digitial encoders smarter. (v3)")
Signed-off-by: Alexey Velichayshiy <[email protected]>
---
 drivers/gpu/drm/radeon/atombios_encoders.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c 
b/drivers/gpu/drm/radeon/atombios_encoders.c
index 5cfd8fcfa5e8..8b15c1e0d41f 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1931,6 +1931,8 @@ atombios_set_encoder_crtc_source(struct drm_encoder 
*encoder)
                        case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
                        case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
                                dig = radeon_encoder->enc_priv;
+                               if (!dig)
+                                       return;
                                switch (dig->dig_encoder) {
                                case 0:
                                        args.v2.ucEncoderID = 
ASIC_INT_DIG1_ENCODER_ID;
-- 
2.43.0

Reply via email to