|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH QEMU-XEN v3 7/8] xen: domainbuild: reopen libxenctrl interface after forking for domain watcher.
On Wed, 7 Oct 2015, Ian Campbell wrote:
> 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 <ian.campbell@xxxxxxxxxx>
>
> 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?
Indeed
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 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 1b824aa..a7c1ca0 100644
> --- a/include/hw/xen/xen_common.h
> +++ b/include/hw/xen/xen_common.h
> @@ -116,12 +116,6 @@ static inline XenXC xen_xc_interface_open(void *logger,
> void *dombuild_logger,
> #define xenforeignmemory_map(h,d,p,a,e,n) xc_map_foreign_bulk(*h,d,p,a,e,n)
> #define xenforeignmemory_unmap(h,p,s) munmap(p, s)
>
> -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)
> @@ -193,11 +187,6 @@ static inline XenXC xen_xc_interface_open(void *logger,
> void *dombuild_logger,
> #define xenforeignmemory_map(h,d,p,a,e,n) xc_map_foreign_bulk(*h,d,p,a,e,n)
> #define xenforeignmemory_unmap(h,p,s) munmap(p, s)
>
> -/* 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 */
>
> #ifndef CONFIG_XEN_STABLE_LIBS
> @@ -219,12 +208,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
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |