Hi Sebastian,

On 2026-07-16 at 12:14:33 +0200, Sebastian Brzezinka wrote:
> When a driver's fbdev probe callback fails before assigning
> fb_helper->funcs (e.g. i915's intel_fbdev_driver_fbdev_probe() bailing
> out early on a DMA/GGTT pin failure), the fbdev client stays registered
> with fb_helper->funcs == NULL. Any later restore, such as on drm fd close
> via drm_client_dev_restore() -> drm_fbdev_client_restore(), reaches
> __drm_fb_helper_restore_fbdev_mode_unlocked() and unconditionally
> dereferences fb_helper->funcs->fb_restore, causing a NULL pointer
> dereference.
> 
> Guard the fb_restore call with a NULL check on fb_helper->funcs.
> 
> Fixes: 2ef5754c9649 ("drm/i915/display: fbdev: Move custom restore code to 
> new callback")
> Signed-off-by: Sebastian Brzezinka <[email protected]>
> ---
>  drivers/gpu/drm/drm_fb_helper.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 7b11a582f8ec..77ae9bd5ef3d 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -146,7 +146,7 @@ __drm_fb_helper_restore_fbdev_mode_unlocked(struct 
> drm_fb_helper *fb_helper,
>       if (do_delayed)
>               drm_fb_helper_hotplug_event(fb_helper);
>  
> -     if (fb_helper->funcs->fb_restore)
> +     if (fb_helper->funcs && fb_helper->funcs->fb_restore)
>               fb_helper->funcs->fb_restore(fb_helper);
>  
>       return ret;
> -- 
> 2.53.0
> 

LGTM:
Reviewed-by: Krzysztof Karas <[email protected]>

-- 
Best Regards,
Krzysztof

Reply via email to