mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
d231c15aff
Inside print_request(), we query the context/timeline name. Nothing immediately protects the context from being freed if the request is complete -- we rely on serialisation by the caller to keep the name valid until they finish using it. Inside intel_engine_dump(), we generally only print the requests in the execution queue protected by the engine->active.lock, but we also show the pending execlists ports which are not protected and so require a rcu_read_lock to keep the pointer valid. [ 1695.700883] BUG: KASAN: use-after-free in i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.700981] Read of size 8 at addr ffff8887344f4d50 by task gem_ctx_persist/2968 [ 1695.701068] [ 1695.701156] CPU: 1 PID: 2968 Comm: gem_ctx_persist Tainted: G U 5.4.0-rc6+ #331 [ 1695.701246] Hardware name: Intel Corporation NUC7i5BNK/NUC7i5BNB, BIOS BNKBL357.86A.0052.2017.0918.1346 09/18/2017 [ 1695.701334] Call Trace: [ 1695.701424] dump_stack+0x5b/0x90 [ 1695.701870] ? i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.701964] print_address_description.constprop.7+0x36/0x50 [ 1695.702408] ? i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.702856] ? i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.702947] __kasan_report.cold.10+0x1a/0x3a [ 1695.703390] ? i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.703836] i915_fence_get_timeline_name+0x53/0x90 [i915] [ 1695.704241] print_request+0x82/0x2e0 [i915] [ 1695.704638] ? fwtable_read32+0x133/0x360 [i915] [ 1695.705042] ? write_timestamp+0x110/0x110 [i915] [ 1695.705133] ? _raw_spin_lock_irqsave+0x79/0xc0 [ 1695.705221] ? refcount_inc_not_zero_checked+0x91/0x110 [ 1695.705306] ? refcount_dec_and_mutex_lock+0x50/0x50 [ 1695.705709] ? intel_engine_find_active_request+0x202/0x230 [i915] [ 1695.706115] intel_engine_dump+0x2c9/0x900 [i915] Fixes: |
||
---|---|---|
.. | ||
display | ||
gem | ||
gt | ||
gvt | ||
oa | ||
selftests | ||
i915_active_types.h | ||
i915_active.c | ||
i915_active.h | ||
i915_buddy.c | ||
i915_buddy.h | ||
i915_cmd_parser.c | ||
i915_debugfs.c | ||
i915_debugfs.h | ||
i915_drv.c | ||
i915_drv.h | ||
i915_fixed.h | ||
i915_gem_evict.c | ||
i915_gem_fence_reg.c | ||
i915_gem_fence_reg.h | ||
i915_gem_gtt.c | ||
i915_gem_gtt.h | ||
i915_gem.c | ||
i915_gem.h | ||
i915_getparam.c | ||
i915_globals.c | ||
i915_globals.h | ||
i915_gpu_error.c | ||
i915_gpu_error.h | ||
i915_ioc32.c | ||
i915_irq.c | ||
i915_irq.h | ||
i915_memcpy.c | ||
i915_memcpy.h | ||
i915_mm.c | ||
i915_params.c | ||
i915_params.h | ||
i915_pci.c | ||
i915_perf_types.h | ||
i915_perf.c | ||
i915_perf.h | ||
i915_pmu.c | ||
i915_pmu.h | ||
i915_priolist_types.h | ||
i915_pvinfo.h | ||
i915_query.c | ||
i915_query.h | ||
i915_reg.h | ||
i915_request.c | ||
i915_request.h | ||
i915_scatterlist.c | ||
i915_scatterlist.h | ||
i915_scheduler_types.h | ||
i915_scheduler.c | ||
i915_scheduler.h | ||
i915_selftest.h | ||
i915_suspend.c | ||
i915_suspend.h | ||
i915_sw_fence_work.c | ||
i915_sw_fence_work.h | ||
i915_sw_fence.c | ||
i915_sw_fence.h | ||
i915_switcheroo.c | ||
i915_switcheroo.h | ||
i915_syncmap.c | ||
i915_syncmap.h | ||
i915_sysfs.c | ||
i915_sysfs.h | ||
i915_trace_points.c | ||
i915_trace.h | ||
i915_user_extensions.c | ||
i915_user_extensions.h | ||
i915_utils.c | ||
i915_utils.h | ||
i915_vgpu.c | ||
i915_vgpu.h | ||
i915_vma.c | ||
i915_vma.h | ||
intel_csr.c | ||
intel_csr.h | ||
intel_device_info.c | ||
intel_device_info.h | ||
intel_gvt.c | ||
intel_gvt.h | ||
intel_memory_region.c | ||
intel_memory_region.h | ||
intel_pch.c | ||
intel_pch.h | ||
intel_pm.c | ||
intel_pm.h | ||
intel_region_lmem.c | ||
intel_region_lmem.h | ||
intel_runtime_pm.c | ||
intel_runtime_pm.h | ||
intel_sideband.c | ||
intel_sideband.h | ||
intel_uncore.c | ||
intel_uncore.h | ||
intel_wakeref.c | ||
intel_wakeref.h | ||
intel_wopcm.c | ||
intel_wopcm.h | ||
Kconfig | ||
Kconfig.debug | ||
Kconfig.profile | ||
Kconfig.unstable | ||
Makefile |