• cpaul@redhat.com's avatar
    drm/dp/mst: Get validated port ref in drm_dp_update_payload_part1() · 1fbb922a
    cpaul@redhat.com authored
    commit 263efde3 upstream.
    
    We can thank KASAN for finding this, otherwise I probably would have spent
    hours on it. This fixes a somewhat harder to trigger kernel panic, occuring
    while enabling MST where the port we were currently updating the payload on
    would have all of it's refs dropped before we finished what we were doing:
    
    ==================================================================
    BUG: KASAN: use-after-free in drm_dp_update_payload_part1+0xb3f/0xdb0 [drm_kms_helper] at addr ffff8800d29de018
    Read of size 4 by task Xorg/973
    =============================================================================
    BUG kmalloc-2048 (Tainted: G    B   W      ): kasan: bad access detected
    -----------------------------------------------------------------------------
    
    INFO: Allocated in drm_dp_add_port+0x1aa/0x1ed0 [drm_kms_helper] age=16477 cpu=0 pid=2175
    	___slab_alloc+0x472/0x490
    	__slab_alloc+0x20/0x40
    	kmem_cache_alloc_trace+0x151/0x190
    	drm_dp_add_port+0x1aa/0x1ed0 [drm_kms_helper]
    	drm_dp_send_link_address+0x526/0x960 [drm_kms_helper]
    	drm_dp_check_and_send_link_address+0x1ac/0x210 [drm_kms_helper]
    	drm_dp_mst_link_probe_work+0x77/0xd0 [drm_kms_helper]
    	process_one_work+0x562/0x1350
    	worker_thread+0xd9/0x1390
    	kthread+0x1c5/0x260
    	ret_from_fork+0x22/0x40
    INFO: Freed in drm_dp_free_mst_port+0x50/0x60 [drm_kms_helper] age=7521 cpu=0 pid=2175
    	__slab_free+0x17f/0x2d0
    	kfree+0x169/0x180
    	drm_dp_free_mst_port+0x50/0x60 [drm_kms_helper]
    	drm_dp_destroy_connector_work+0x2b8/0x490 [drm_kms_helper]
    	process_one_work+0x562/0x1350
    	worker_thread+0xd9/0x1390
    	kthread+0x1c5/0x260
    	ret_from_fork+0x22/0x40
    
    which on this T460s, would eventually lead to kernel panics in somewhat
    random places later in intel_mst_enable_dp() if we got lucky enough.
    Signed-off-by: default avatarLyude <cpaul@redhat.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    1fbb922a
drm_dp_mst_topology.c 81.1 KB