[Intel-gfx] [PATCH] drm/i915/display: Fix NULL-crtc deref in calc_min_cdclk()
Chris Wilson
chris at chris-wilson.co.uk
Mon Feb 3 13:35:55 UTC 2020
Quoting Ville Syrjälä (2020-02-03 13:29:07)
> On Sun, Feb 02, 2020 at 01:43:38PM +0000, Chris Wilson wrote:
> > [ 23.419442] BUG: KASAN: null-ptr-deref in intel_plane_calc_min_cdclk+0x82/0x440 [i915]
> > [ 23.419527] Read of size 4 at addr 00000000000000f8 by task insmod/735
> > [ 23.419578]
> > [ 23.419644] CPU: 2 PID: 735 Comm: insmod Not tainted 5.5.0+ #114
> > [ 23.419716] Hardware name: ��������������������������������� ���������������������������������/���������������������������������, BIOS RYBDWi35.86A.0246.2
> > [ 23.419793] Call Trace:
> > [ 23.419864] dump_stack+0xef/0x16e
> > [ 23.419927] __kasan_report.cold+0x60/0x90
> > [ 23.420157] ? intel_plane_calc_min_cdclk+0x82/0x440 [i915]
> > [ 23.420397] intel_plane_calc_min_cdclk+0x82/0x440 [i915]
> > [ 23.420630] intel_atomic_check+0x455f/0x65a0 [i915]
> > [ 23.420708] ? mark_held_locks+0x90/0x90
> > [ 23.420929] ? intel_crtc_duplicate_state+0x2e/0x1b0 [i915]
> > [ 23.421172] ? intel_plane_duplicate_state+0x2d/0xc0 [i915]
> > [ 23.421239] ? __drm_dbg+0xa4/0x120
> > [ 23.421303] ? __kasan_kmalloc.constprop.0+0xc2/0xd0
> > [ 23.421355] ? __kmalloc_track_caller+0x23a/0x320
> > [ 23.421602] ? intel_calc_active_pipes+0x1c0/0x1c0 [i915]
> > [ 23.421852] sanitize_watermarks+0x220/0x510 [i915]
> > [ 23.422092] ? intel_atomic_check+0x65a0/0x65a0 [i915]
> > [ 23.422164] ? drm_modeset_unlock_all+0x88/0x130
> > [ 23.422402] intel_modeset_init+0x1b76/0x3c90 [i915]
> > [ 23.422647] ? intel_finish_reset+0x2d0/0x2d0 [i915]
> > [ 23.422851] ? intel_irq_install+0x12c/0x210 [i915]
> > [ 23.423076] i915_driver_probe+0x13e7/0x2930 [i915]
> >
> > Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> > Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_atomic_plane.c | 11 ++++++-----
> > 1 file changed, 6 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > index 91ab6e2ab1fd..83505bd8ad80 100644
> > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > @@ -165,14 +165,15 @@ int intel_plane_calc_min_cdclk(struct intel_atomic_state *state,
> > intel_atomic_get_new_plane_state(state, plane);
> > struct intel_crtc *crtc = to_intel_crtc(plane_state->hw.crtc);
> > const struct intel_cdclk_state *cdclk_state;
> > - struct intel_crtc_state *new_crtc_state =
> > - intel_atomic_get_new_crtc_state(state, crtc);
> > - const struct intel_crtc_state *old_crtc_state =
> > - intel_atomic_get_old_crtc_state(state, crtc);
>
> Doh. Not NULL safe clearly.
>
> > + const struct intel_crtc_state *old_crtc_state;
> > + struct intel_crtc_state *new_crtc_state;
> >
> > - if (!plane_state->uapi.visible || !plane->min_cdclk)
> > + if (!crtc || !plane_state->uapi.visible || !plane->min_cdclk)
>
> Should be no need for the !crtc check. We can't have visible==true
> without a crtc.
Ta, I thought that might be the case.
-Chris
More information about the Intel-gfx
mailing list