Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752440AbdG1PNb (ORCPT ); Fri, 28 Jul 2017 11:13:31 -0400 Received: from userp1040.oracle.com ([156.151.31.81]:28593 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751628AbdG1PNa (ORCPT ); Fri, 28 Jul 2017 11:13:30 -0400 Subject: Re: [PATCH] xen: avoid deadlock in xenbus To: Juergen Gross , linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org References: <20170728145355.17258-1-jgross@suse.com> From: Boris Ostrovsky Message-ID: <71819268-dd53-a60f-5759-b3ae1ce486d4@oracle.com> Date: Fri, 28 Jul 2017 11:14:59 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170728145355.17258-1-jgross@suse.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 964 Lines: 37 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 Reviewed-by: Boris Ostrovsky +stable?