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

Ma Ke posted 1 patch 1 year, 4 months ago
drivers/gpu/drm/i915/display/intel_display.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] drm/i915: Fix NULL ptr deref in intel_async_flip_check_uapi()
Posted by Ma Ke 1 year, 4 months ago
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(-)

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);
-- 
2.25.1
Re: [PATCH] drm/i915: Fix NULL ptr deref in intel_async_flip_check_uapi()
Posted by Andi Shyti 1 year, 4 months ago
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