• Ziyang Xuan's avatar
    thermal/core: fix a UAF bug in __thermal_cooling_device_register() · 0a5c2671
    Ziyang Xuan authored
    When device_register() return failed, program will goto out_kfree_type
    to release 'cdev->device' by put_device(). That will call thermal_release()
    to free 'cdev'. But the follow-up processes access 'cdev' continually.
    That trggers the UAF bug.
    
    ====================================================================
    BUG: KASAN: use-after-free in __thermal_cooling_device_register+0x75b/0xa90
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    Call Trace:
     dump_stack_lvl+0xe2/0x152
     print_address_description.constprop.0+0x21/0x140
     ? __thermal_cooling_device_register+0x75b/0xa90
     kasan_report.cold+0x7f/0x11b
     ? __thermal_cooling_device_register+0x75b/0xa90
     __thermal_cooling_device_register+0x75b/0xa90
     ? memset+0x20/0x40
     ? __sanitizer_cov_trace_pc+0x1d/0x50
     ? __devres_alloc_node+0x130/0x180
     devm_thermal_of_cooling_device_register+0x67/0xf0
     max6650_probe.cold+0x557/0x6aa
    ......
    
    Freed by task 258:
     kasan_save_stack+0x1b/0x40
     kasan_set_track+0x1c/0x30
     kasan_set_free_info+0x20/0x30
     __kasan_slab_free+0x109/0x140
     kfree+0x117/0x4c0
     thermal_release+0xa0/0x110
     device_release+0xa7/0x240
     kobject_put+0x1ce/0x540
     put_device+0x20/0x30
     __thermal_cooling_device_register+0x731/0xa90
     devm_thermal_of_cooling_device_register+0x67/0xf0
     max6650_probe.cold+0x557/0x6aa [max6650]
    
    Do not use 'cdev' again after put_device() to fix the problem like doing
    in thermal_zone_device_register().
    
    [dlezcano]: as requested by Rafael, change the affectation into two statements.
    
    Fixes: 58483761 ("thermal/drivers/core: Use a char pointer for the cooling device name")
    Signed-off-by: default avatarZiyang Xuan <william.xuanziyang@huawei.com>
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Link: https://lore.kernel.org/r/20211015024504.947520-1-william.xuanziyang@huawei.comSigned-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
    0a5c2671
thermal_core.c 37.9 KB