mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
xen: domainbuild: reopen libxenctrl interface after forking for domain watcher.
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@citrix.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
This commit is contained in:
parent
5eeb39c24b
commit
228df5c91c
@ -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);
|
||||
|
@ -116,12 +116,6 @@ static inline XenXC xen_xc_interface_open(void *logger, void *dombuild_logger,
|
||||
|
||||
/* See below for xenforeignmemory_* APIs */
|
||||
|
||||
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,
|
||||
|
||||
/* See below for xenforeignmemory_* APIs */
|
||||
|
||||
/* FIXME There is no way to have the xen fd */
|
||||
static inline int xc_fd(xc_interface *xen_xc)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 471 */
|
||||
|
||||
typedef xc_interface *XenXC;
|
||||
@ -214,12 +203,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user