• Wang Hai's avatar
    drm: fix null-ptr-deref in drm_dev_init_release() · acf20ed0
    Wang Hai authored
    I got a null-ptr-deref report:
    
    [drm:drm_dev_init [drm]] *ERROR* Cannot allocate anonymous inode: -12
    ==================================================================
    BUG: KASAN: null-ptr-deref in iput+0x3c/0x4a0
    ...
    Call Trace:
     dump_stack_lvl+0x6c/0x8b
     kasan_report.cold+0x64/0xdb
     __asan_load8+0x69/0x90
     iput+0x3c/0x4a0
     drm_dev_init_release+0x39/0xb0 [drm]
     drm_managed_release+0x158/0x2d0 [drm]
     drm_dev_init+0x3a7/0x4c0 [drm]
     __devm_drm_dev_alloc+0x55/0xd0 [drm]
     mi0283qt_probe+0x8a/0x2b5 [mi0283qt]
     spi_probe+0xeb/0x130
    ...
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    If drm_fs_inode_new() fails in drm_dev_init(), dev->anon_inode will point
    to PTR_ERR(...) instead of NULL. This will result in null-ptr-deref when
    drm_fs_inode_free(dev->anon_inode) is called.
    
    drm_dev_init()
    	drm_fs_inode_new() // fail, dev->anon_inode = PTR_ERR(...)
    	drm_managed_release()
    		drm_dev_init_release()
    			drm_fs_inode_free() // access non-existent anon_inode
    
    Define a temp variable and assign it to dev->anon_inode if the temp
    variable is not PTR_ERR.
    
    Fixes: 2cbf7fc6 ("drm: Use drmm_ for drm_dev_init cleanup")
    Reported-by: default avatarHulk Robot <hulkci@huawei.com>
    Signed-off-by: default avatarWang Hai <wanghai38@huawei.com>
    Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211013114139.4042207-1-wanghai38@huawei.com
    acf20ed0
drm_drv.c 29 KB