linux/drivers/gpu/drm/ttm
Pavel Skripkin 2dbd9c27ed drm/ttm: add missing NULL checks
My local syzbot instance hit GPF in ttm_bo_release().
Unfortunately, syzbot didn't produce a reproducer for this, but I
found out possible scenario:

drm_gem_vram_create()            <-- drm_gem_vram_object kzalloced
				     (bo embedded in this object)
  ttm_bo_init()
    ttm_bo_init_reserved()
      ttm_resource_alloc()
        man->func->alloc()       <-- allocation failure
      ttm_bo_put()
	ttm_bo_release()
	  ttm_mem_io_free()      <-- bo->resource == NULL passed
				     as second argument
	     *GPF*

Added NULL check inside ttm_mem_io_free() to prevent reported GPF and
make this function NULL save in future.

Same problem was in ttm_bo_move_to_lru_tail() as Christian reported.
ttm_bo_move_to_lru_tail() is called in ttm_bo_release() and mem pointer
can be NULL as well as in ttm_mem_io_free().

Fail log:

KASAN: null-ptr-deref in range [0x0000000000000020-0x0000000000000027]
...
RIP: 0010:ttm_mem_io_free+0x28/0x170 drivers/gpu/drm/ttm/ttm_bo_util.c:66
..
Call Trace:
 ttm_bo_release+0xd94/0x10a0 drivers/gpu/drm/ttm/ttm_bo.c:422
 kref_put include/linux/kref.h:65 [inline]
 ttm_bo_put drivers/gpu/drm/ttm/ttm_bo.c:470 [inline]
 ttm_bo_init_reserved+0x7cb/0x960 drivers/gpu/drm/ttm/ttm_bo.c:1050
 ttm_bo_init+0x105/0x270 drivers/gpu/drm/ttm/ttm_bo.c:1074
 drm_gem_vram_create+0x332/0x4c0 drivers/gpu/drm/drm_gem_vram_helper.c:228

Fixes: d3116756a7 ("drm/ttm: rename bo->mem and make it a pointer")
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210708112518.17271-1-paskripkin@gmail.com
2021-07-21 13:00:40 +02:00
..
Makefile drm/ttm: add ttm_sys_manager v3 2021-05-03 12:50:41 +02:00
ttm_agp_backend.c drm/ttm: cleanup ttm_agp_backend 2021-05-03 12:50:41 +02:00
ttm_bo.c drm/ttm: add missing NULL checks 2021-07-21 13:00:40 +02:00
ttm_bo_util.c drm/ttm: add missing NULL checks 2021-07-21 13:00:40 +02:00
ttm_bo_vm.c drm/ttm: nuke VM_MIXEDMAP on BO mappings v3 2021-06-08 11:47:51 +02:00
ttm_device.c drm/ttm: Force re-init if ttm_global_init() fails 2021-07-21 08:34:43 +02:00
ttm_execbuf_util.c drm/ttm: switch to per device LRU lock 2021-03-24 17:05:25 +01:00
ttm_module.c drm/ttm: Add a generic TTM memcpy move for page-based iomem 2021-06-07 16:07:08 +02:00
ttm_module.h drm/ttm: add ttm_sys_manager v3 2021-05-03 12:50:41 +02:00
ttm_pool.c drm-misc-next for 5.13: 2021-03-16 17:08:46 +10:00
ttm_range_manager.c drm/ttm: add a check against null pointer dereference 2021-07-14 17:16:16 +02:00
ttm_resource.c drm/ttm: Add a generic TTM memcpy move for page-based iomem 2021-06-07 16:07:08 +02:00
ttm_sys_manager.c drm/ttm: flip the switch for driver allocated resources v2 2021-06-04 15:16:46 +02:00
ttm_tt.c drm/ttm: Add a generic TTM memcpy move for page-based iomem 2021-06-07 16:07:08 +02:00