diff mbox series

drm/i915: Fix NULL ptr deref in intel_async_flip_check_uapi()

Message ID 20240806092249.2407555-1-make24@iscas.ac.cn (mailing list archive)
State New, archived
Headers show
Series drm/i915: Fix NULL ptr deref in intel_async_flip_check_uapi() | expand

Commit Message

Ma Ke Aug. 6, 2024, 9:22 a.m. UTC
intel_atomic_get_new_crtc_state can return NULL, unless crtc state wasn't
obtained previously with intel_atomic_get_crtc_state. We should check it
for NULLness here, just as in many other places, where we can't guarantee
that intel_atomic_get_crtc_state was called.

Cc: stable@vger.kernel.org
Fixes: b0b2bed2a130 ("drm/i915: Check async flip capability early on")
Signed-off-by: Ma Ke <make24@iscas.ac.cn>
---
 drivers/gpu/drm/i915/display/intel_display.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andi Shyti Aug. 7, 2024, 9:21 p.m. UTC | #1
Hi Ma,

> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index c2c388212e2e..9dd7b5985d57 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -6115,7 +6115,7 @@ static int intel_async_flip_check_uapi(struct intel_atomic_state *state,
>  		return -EINVAL;
>  	}
>  
> -	if (intel_crtc_needs_modeset(new_crtc_state)) {
> +	if (new_crtc_state && intel_crtc_needs_modeset(new_crtc_state)) {

new_crtc_state is used also earlier. If it was NULL you wouldn't
have reached this state.

Have you experienced a null pointer dereference or is it some
code analyzer that reported this? Can you explain how
intel_atomic_get_new_crtc_state() can return NULL?

For now this is nacked.

Thanks,
Andi
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index c2c388212e2e..9dd7b5985d57 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -6115,7 +6115,7 @@  static int intel_async_flip_check_uapi(struct intel_atomic_state *state,
 		return -EINVAL;
 	}
 
-	if (intel_crtc_needs_modeset(new_crtc_state)) {
+	if (new_crtc_state && intel_crtc_needs_modeset(new_crtc_state)) {
 		drm_dbg_kms(&i915->drm,
 			    "[CRTC:%d:%s] modeset required\n",
 			    crtc->base.base.id, crtc->base.name);