• B
    drm/i915/vma: Correct use after free in eviction · 8637b407
    Ben Widawsky 提交于
    The vma will [possibly] be destroyed during unbind in eviction.
    Immediately after this, we try to delete the list entry.
    
    Chris and Ville did the debug on this before I woke up, I just get to
    take credit for the fix :p
    
    For future reference the Oops that Mika reported:
    
    [  403.472448] BUG: unable to handle kernel paging request at 6b6b6b6b
    [  403.472473] IP: [<c12c1500>] __list_del_entry+0x20/0xe0
    [  403.472514] *pdpt = 000000002e89c001 *pde = 0000000000000000
    [  403.472556] Oops: 0000 [#1] SMP
    [  403.472582] Modules linked in: mxm_wmi snd_hda_codec_hdmi snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi psmouse snd_seq_midi_event snd_seq serio_raw snd_timer snd_seq_device snd soundcore snd_page_alloc wmi bnep rfcomm bluetooth mac_hid parport_pc ppdev lp parport usbhid dm_crypt firewire_ohci firewire_core crc_itu_t i915 drm_kms_helper e1000e ptp drm i2c_algo_bit pps_core xhci_hcd video
    [  403.472895] CPU: 2 PID: 1940 Comm: Xorg Not tainted 3.11.0-rc2+ #827
    [  403.472938] Hardware name:                  /DZ77BH-55K, BIOS BHZ7710H.86A.0070.2012.0416.2117 04/16/2012
    [  403.473002] task: ec866c00 ti: ee6a2000 task.ti: ee6a2000
    [  403.473039] EIP: 0060:[<c12c1500>] EFLAGS: 00013202 CPU: 2
    [  403.473078] EIP is at __list_del_entry+0x20/0xe0
    [  403.473109] EAX: f016d9bc EBX: f016d9bc ECX: 6b6b6b6b EDX: 6b6b6b6b
    [  403.473151] ESI: 00000000 EDI: ee6a3c90 EBP: ee6a3c60 ESP: ee6a3c48
    [  403.473193]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    [  403.473230] CR0: 80050033 CR2: 6b6b6b6b CR3: 2ec43000 CR4: 001407f0
    [  403.473271] Stack:
    [  403.473285]  f63b2ff0 f61f98c0 f61f8000 f016d9bc 00000000 f016d9bc ee6a3cac f8519a4a
    [  403.473347]  00000000 00000000 10000000 f61f8000 0100a000 10000000 00000001 008ca000
    [  403.473410]  f64ee840 f61f98c0 f016d9bc f016dcec ee6a3c98 ee6a3c98 f61f98c0 dcc58f00
    [  403.473472] Call Trace:
    [  403.473509]  [<f8519a4a>] i915_gem_evict_something+0x17a/0x2d0 [i915]
    [  403.473567]  [<f8516ed1>] i915_gem_object_pin+0x271/0x660 [i915]
    [  403.473622]  [<f851c740>] ? i915_ggtt_clear_range+0x20/0x20 [i915]
    [  403.473676]  [<f8517afa>] i915_gem_object_pin_to_display_plane+0xda/0x190 [i915]
    [  403.473742]  [<f852d9fa>] intel_pin_and_fence_fb_obj+0xba/0x140 [i915]
    [  403.473800]  [<f852db40>] intel_gen7_queue_flip+0x30/0x1c0 [i915]
    [  403.473856]  [<f85337b0>] intel_crtc_page_flip+0x1a0/0x320 [i915]
    [  403.473911]  [<f847b549>] ? drm_framebuffer_reference+0x39/0x80 [drm]
    [  403.473965]  [<f847f9fb>] drm_mode_page_flip_ioctl+0x28b/0x320 [drm]
    [  403.474018]  [<f846fec8>] drm_ioctl+0x4b8/0x560 [drm]
    [  403.474064]  [<f847f770>] ? drm_mode_gamma_get_ioctl+0xd0/0xd0 [drm]
    [  403.474113]  [<c1140f8a>] ? do_sync_read+0x6a/0xa0
    [  403.474154]  [<f846fa10>] ? drm_copy_field+0x80/0x80 [drm]
    [  403.474193]  [<c115134c>] do_vfs_ioctl+0x7c/0x5b0
    [  403.474228]  [<c1141d2f>] ? vfs_read+0xef/0x160
    [  403.474263]  [<c108dcbb>] ? ktime_get_ts+0x4b/0x120
    [  403.474298]  [<c1151917>] SyS_ioctl+0x97/0xa0
    [  403.474330]  [<c1590bc1>] sysenter_do_call+0x12/0x22
    [  403.474364] Code: 55 f4 8b 45 f8 e9 75 ff ff ff 90 55 89 e5 53 83 ec 14 8b 08 8b 50 04 81 f9 00 01 10 00 74 24 81 fa 00 02 20 00 0f 84 8e 00 00 00 <8b> 1a 39 d8 75 62 8b 59 04 39 d8 75 35 89 51 04 89 0a 83 c4 14
    [  403.474566] EIP: [<c12c1500>] __list_del_entry+0x20/0xe0 SS:ESP 0068:ee6a3c48
    [  403.476513] CR2: 000000006b6b6b6b
    
    v2: Missed the drm_object_unreference use after free (Ville)
    Daniel Vetter <daniel@ffwll.ch> writes:
    Reported-by: NMika Kuoppala <mika.kuoppala@intel.com>
    Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: NBen Widawsky <ben@bwidawsk.net>
    Reviewed-by: NChris Wilson <chris@chris-wilson.co.uk>
    [danvet: Add the Oops from Mika to the commit message.]
    Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
    8637b407
i915_gem_evict.c 5.8 KB