From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47947) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZovFL-0004k1-96 for qemu-devel@nongnu.org; Wed, 21 Oct 2015 11:24:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZovFK-00087v-49 for qemu-devel@nongnu.org; Wed, 21 Oct 2015 11:24:11 -0400 Received: from smtp.citrix.com ([66.165.176.89]:36404) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZovFJ-00084w-WB for qemu-devel@nongnu.org; Wed, 21 Oct 2015 11:24:10 -0400 From: Ian Campbell Date: Wed, 21 Oct 2015 16:23:57 +0100 Message-ID: <1445441038-25903-9-git-send-email-ian.campbell@citrix.com> In-Reply-To: <1445441038-25903-1-git-send-email-ian.campbell@citrix.com> References: <1445440941.9563.163.camel@citrix.com> <1445441038-25903-1-git-send-email-ian.campbell@citrix.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH QEMU-XEN v4 8/9] xen: domainbuild: reopen libxenctrl interface after forking for domain watcher. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, xen-devel@lists.xen.org Cc: Ian Campbell , qemu-devel@nongnu.org, stefano.stabellini@eu.citrix.com Using an existing libxenctrl handle after a fork was never particularly safe (especially if foreign mappings existed at the time of the fork) and the xc fd has been unavailable for many releases. Reopen the handle after fork and therefore do away with xc_fd(). Signed-off-by: Ian Campbell Acked-by: Stefano Stabellini --- The fact that xc_fd hasn't been useful since at least Xen 4.1 makes me question the utility of this domainbuild in QEMU. Perhaps we should just nuke it? --- hw/xenpv/xen_domainbuild.c | 9 ++++++--- include/hw/xen/xen_common.h | 17 ----------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/hw/xenpv/xen_domainbuild.c b/hw/xenpv/xen_domainbuild.c index c0ab753..3e8422f 100644 --- a/hw/xenpv/xen_domainbuild.c +++ b/hw/xenpv/xen_domainbuild.c @@ -174,12 +174,15 @@ static int xen_domain_watcher(void) for (i = 3; i < n; i++) { if (i == fd[0]) continue; - if (i == xc_fd(xen_xc)) { - continue; - } close(i); } + /* + * Reopen xc interface, since the original is unsafe after fork + * and was closed above. + */ + xen_xc = xc_interface_open(0, 0, 0); + /* ignore term signals */ signal(SIGINT, SIG_IGN); signal(SIGTERM, SIG_IGN); diff --git a/include/hw/xen/xen_common.h b/include/hw/xen/xen_common.h index 38293b4..4b4b50d 100644 --- a/include/hw/xen/xen_common.h +++ b/include/hw/xen/xen_common.h @@ -121,12 +121,6 @@ static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger, xc_map_foreign_bulk(*h, d, p, a, e, n) #define xenforeignmemory_unmap(h, p, s) munmap(p, s * XC_PAGE_SIZE) -static inline int xc_fd(int xen_xc) -{ - return xen_xc; -} - - static inline int xc_domain_populate_physmap_exact (XenXC xc_handle, uint32_t domid, unsigned long nr_extents, unsigned int extent_order, unsigned int mem_flags, xen_pfn_t *extent_start) @@ -201,11 +195,6 @@ static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger, xc_map_foreign_bulk(*h, d, p, a, e, n) #define xenforeignmemory_unmap(h, p, s) munmap(p, s * XC_PAGE_SIZE) -/* FIXME There is now way to have the xen fd */ -static inline int xc_fd(xc_interface *xen_xc) -{ - return -1; -} #else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 470 */ typedef xc_interface *XenXC; @@ -223,12 +212,6 @@ static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger, return xc_interface_open(logger, dombuild_logger, open_flags); } -/* FIXME There is now way to have the xen fd */ -static inline int xc_fd(xc_interface *xen_xc) -{ - return -1; -} - #endif /* Xen before 4.2 */ -- 2.1.4