• Li Bin's avatar
    workqueue: Fix NULL pointer dereference · 46f15501
    Li Bin authored
    commit cef572ad
    When queue_work() is used in irq (not in task context), there is
    a potential case that trigger NULL pointer dereference.
    	|-worker->current_pwq = pwq
     	|-worker->current_pwq = NULL
    				//interrupt here
    						//assuming that the wq is draining
    							//Here, 'current' is the interrupted worker!
    								|-current->current_pwq is NULL here!
    Avoid it by checking for task context in current_wq_worker(), and
    if not in task context, we shouldn't use the 'current' to check the
    Reported-by: default avatarXiaofei Tan <tanxiaofei@huawei.com>
    Signed-off-by: default avatarLi Bin <huawei.libin@huawei.com>
    Reviewed-by: default avatarLai Jiangshan <jiangshanlai@gmail.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Fixes: 8d03ecfe
     ("workqueue: reimplement is_chained_work() using current_wq_worker()")
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
workqueue_internal.h 2.24 KB