On 07/28/2017 10:53 AM, Juergen Gross wrote: > When starting the xenwatch thread a theoretical deadlock situation is > possible: > > xs_init() contains: > > task = kthread_run(xenwatch_thread, NULL, "xenwatch"); > if (IS_ERR(task)) > return PTR_ERR(task); > xenwatch_pid = task->pid; > > And xenwatch_thread() does: > > mutex_lock(&xenwatch_mutex); > ... > event->handle->callback(); > ... > mutex_unlock(&xenwatch_mutex); > > The callback could call unregister_xenbus_watch() which does: > > ... > if (current->pid != xenwatch_pid) > mutex_lock(&xenwatch_mutex); > ... > > In case a watch is firing before xenwatch_pid could be set and the > callback of that watch unregisters a watch, then a self-deadlock would > occur. > > Avoid this by setting xenwatch_pid in xenwatch_thread(). > > Signed-off-by: Juergen Gross <jgr...@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrov...@oracle.com> +stable?