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