SHLIB_libxenevtchn = $(SHDEPS_libxenevtchn) -Wl,-rpath-link=$(XEN_LIBXENEVTCHN)
CFLAGS_libxengnttab = -I$(XEN_LIBXENGNTTAB)/include $(CFLAGS_xeninclude)
-SHDEPS_libxengnttab = $(SHLIB_libxentoollog)
+SHDEPS_libxengnttab = $(SHLIB_libxentoollog) $(SHLIB_libxentoolcore)
LDLIBS_libxengnttab = $(SHDEPS_libxengnttab) $(XEN_LIBXENGNTTAB)/libxengnttab$(libextension)
SHLIB_libxengnttab = $(SHDEPS_libxengnttab) -Wl,-rpath-link=$(XEN_LIBXENGNTTAB)
CFLAGS += -Werror -Wmissing-prototypes
CFLAGS += -I./include $(CFLAGS_xeninclude)
-CFLAGS += $(CFLAGS_libxentoollog)
+CFLAGS += $(CFLAGS_libxentoollog) $(CFLAGS_libxentoolcore)
SRCS-GNTTAB += gnttab_core.c
SRCS-GNTSHR += gntshr_core.c
$(SYMLINK_SHLIB) $< $@
libxengnttab.so.$(MAJOR).$(MINOR): $(PIC_OBJS) libxengnttab.map
- $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(APPEND_LDFLAGS)
+ $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxengnttab.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $(PIC_OBJS) $(LDLIBS_libxentoollog) $(LDLIBS_libxentoolcore) $(APPEND_LDFLAGS)
.PHONY: install
install: build
#include "private.h"
+static int all_restrict_cb(Xentoolcore__Active_Handle *ah, uint32_t domid) {
+ xengnttab_handle *xgt = CONTAINER_OF(ah, *xgt, tc_ah);
+ return xentoolcore__restrict_by_dup2_null(xgt->fd);
+}
+
xengnttab_handle *xengnttab_open(xentoollog_logger *logger, unsigned open_flags)
{
xengnttab_handle *xgt = malloc(sizeof(*xgt));
xgt->logger = logger;
xgt->logger_tofree = NULL;
+ xgt->tc_ah.restrict_callback = all_restrict_cb;
+ xentoolcore__register_active_handle(&xgt->tc_ah);
+
if (!xgt->logger) {
xgt->logger = xgt->logger_tofree =
(xentoollog_logger*)
err:
osdep_gnttab_close(xgt);
+ xentoolcore__deregister_active_handle(&xgt->tc_ah);
xtl_logger_destroy(xgt->logger_tofree);
free(xgt);
return NULL;
return 0;
rc = osdep_gnttab_close(xgt);
+ xentoolcore__deregister_active_handle(&xgt->tc_ah);
xtl_logger_destroy(xgt->logger_tofree);
free(xgt);
return rc;
#define XENGNTTAB_PRIVATE_H
#include <xentoollog.h>
+#include <xentoolcore_internal.h>
#include <xengnttab.h>
/* Set of macros/defines used by both Linux and FreeBSD */
struct xengntdev_handle {
xentoollog_logger *logger, *logger_tofree;
int fd;
+ Xentoolcore__Active_Handle tc_ah;
};
int osdep_gnttab_open(xengnttab_handle *xgt);
Version: @@version@@
Cflags: -I${includedir} @@cflagslocal@@
Libs: @@libsflag@@${libdir} -lxengnttab
-Requires.private: xentoollog
+Requires.private: xentoollog,xentoolcore