]> xenbits.xensource.com Git - people/iwj/xen.git/commitdiff
tools/libxencalls: add new function to query hypercall buffer safety
authorJuergen Gross <jgross@suse.com>
Mon, 18 Jun 2018 07:18:55 +0000 (09:18 +0200)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Mon, 18 Jun 2018 11:31:48 +0000 (12:31 +0100)
Add a new function to query whether hypercall buffers are always safe
to access by the hypervisor or might result in EFAULT.

Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libs/call/Makefile
tools/libs/call/freebsd.c
tools/libs/call/include/xencall.h
tools/libs/call/libxencall.map
tools/libs/call/linux.c
tools/libs/call/minios.c
tools/libs/call/netbsd.c
tools/libs/call/solaris.c

index 39dd2074284c00284d5d51c9821e7b252c2d6aff..252d3973fc834d076cbf5d747f08094b22accceb 100644 (file)
@@ -2,7 +2,7 @@ XEN_ROOT = $(CURDIR)/../../..
 include $(XEN_ROOT)/tools/Rules.mk
 
 MAJOR    = 1
-MINOR    = 0
+MINOR    = 1
 SHLIB_LDFLAGS += -Wl,--version-script=libxencall.map
 
 CFLAGS   += -Werror -Wmissing-prototypes
index cadd313c040800ab6800bb22386a108060ceb428..28bfd852c1ec81589d8b51c423ac0b04e6f393c3 100644 (file)
@@ -107,6 +107,11 @@ void osdep_free_pages(xencall_handle *xcall, void *ptr, size_t npages)
     errno = saved_errno;
 }
 
+int xencall_buffers_never_fault(xencall_handle *xcall)
+{
+    return 1;
+}
+
 /*
  * Local variables:
  * mode: C
index bafacdd2baeefdca2c79a6e26c91966f44515c4b..0d09bc8eae7a8938cd0f16509e3094faf2666f3c 100644 (file)
@@ -115,6 +115,13 @@ void xencall_free_buffer_pages(xencall_handle *xcall, void *p, size_t nr_pages);
 void *xencall_alloc_buffer(xencall_handle *xcall, size_t size);
 void xencall_free_buffer(xencall_handle *xcall, void *p);
 
+/*
+ * Are allocated hypercall buffers safe to be accessed by the hypervisor all
+ * the time?
+ * Returns 0 if EFAULT might be possible.
+ */
+int xencall_buffers_never_fault(xencall_handle *xcall);
+
 #endif
 
 /*
index 2f96144f40dcdbe8fe130227ac225f3b3fcd050b..c482195b95ddd78e095b09fbf124792ced5c2ccd 100644 (file)
@@ -17,3 +17,8 @@ VERS_1.0 {
                xencall_free_buffer_pages;
        local: *; /* Do not expose anything by default */
 };
+
+VERS_1.1 {
+       global:
+               xencall_buffers_never_fault;
+} VERS_1.0;
index 90c2691486abdcf7dc4db1e33e33cb2a2741fabb..d8a6306e04719947ad64ce0074569ce5b65e9f65 100644 (file)
@@ -171,6 +171,11 @@ void osdep_free_pages(xencall_handle *xcall, void *ptr, size_t npages)
     errno = saved_errno;
 }
 
+int xencall_buffers_never_fault(xencall_handle *xcall)
+{
+    return xcall->buf_fd >= 0;
+}
+
 /*
  * Local variables:
  * mode: C
index f04688f63c17d3f7e54b52d7e2fcf3d53ebf054a..9f7a96995fb2ec9c5e6ee48bdc97cb70f5323c7b 100644 (file)
@@ -70,6 +70,11 @@ void osdep_free_pages(xencall_handle *xcall, void *ptr, size_t npages)
     free(ptr);
 }
 
+int xencall_buffers_never_fault(xencall_handle *xcall)
+{
+    return 1;
+}
+
 /*
  * Local variables:
  * mode: C
index e96fbf16f7e11652e41543ee6000e491c1e7c56f..a5502da377083ea932da49bb14db4b6e88ed39b8 100644 (file)
@@ -110,6 +110,11 @@ int do_xen_hypercall(xencall_handle *xcall, privcmd_hypercall_t *hypercall)
         return hypercall->retval;
 }
 
+int xencall_buffers_never_fault(xencall_handle *xcall)
+{
+    return 1;
+}
+
 /*
  * Local variables:
  * mode: C
index 5aa330e4ebff75302260a6695a0ae7315989b7f7..c63b6a329a141b905e7b57141df2214bb073f6cb 100644 (file)
@@ -86,6 +86,11 @@ int do_xen_hypercall(xencall_handle *xcall, privcmd_hypercall_t *hypercall)
     return ioctl(fd, IOCTL_PRIVCMD_HYPERCALL, hypercall);
 }
 
+int xencall_buffers_never_fault(xencall_handle *xcall)
+{
+    return 1;
+}
+
 /*
  * Local variables:
  * mode: C