• Min Li's avatar
    Bluetooth: Fix race condition in hidp_session_thread · c95930ab
    Min Li authored
    There is a potential race condition in hidp_session_thread that may
    lead to use-after-free. For instance, the timer is active while
    hidp_del_timer is called in hidp_session_thread(). After hidp_session_put,
    then 'session' will be freed, causing kernel panic when hidp_idle_timeout
    is running.
    
    The solution is to use del_timer_sync instead of del_timer.
    
    Here is the call trace:
    
    ? hidp_session_probe+0x780/0x780
    call_timer_fn+0x2d/0x1e0
    __run_timers.part.0+0x569/0x940
    hidp_session_probe+0x780/0x780
    call_timer_fn+0x1e0/0x1e0
    ktime_get+0x5c/0xf0
    lapic_next_deadline+0x2c/0x40
    clockevents_program_event+0x205/0x320
    run_timer_softirq+0xa9/0x1b0
    __do_softirq+0x1b9/0x641
    __irq_exit_rcu+0xdc/0x190
    irq_exit_rcu+0xe/0x20
    sysvec_apic_timer_interrupt+0xa1/0xc0
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMin Li <lm0963hack@gmail.com>
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    c95930ab
core.c 38.9 KB