[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] tools/libxencalls: add new function to query hypercall buffer safety
commit 171d6ecec1efca5a3e395a08acb299453a957528 Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Mon Jun 18 09:18:55 2018 +0200 Commit: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CommitDate: Mon Jun 18 12:31:48 2018 +0100 tools/libxencalls: add new function to query hypercall buffer safety 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@xxxxxxxx> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libs/call/Makefile | 2 +- tools/libs/call/freebsd.c | 5 +++++ tools/libs/call/include/xencall.h | 7 +++++++ tools/libs/call/libxencall.map | 5 +++++ tools/libs/call/linux.c | 5 +++++ tools/libs/call/minios.c | 5 +++++ tools/libs/call/netbsd.c | 5 +++++ tools/libs/call/solaris.c | 5 +++++ 8 files changed, 38 insertions(+), 1 deletion(-) diff --git a/tools/libs/call/Makefile b/tools/libs/call/Makefile index 39dd207428..252d3973fc 100644 --- a/tools/libs/call/Makefile +++ b/tools/libs/call/Makefile @@ -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 diff --git a/tools/libs/call/freebsd.c b/tools/libs/call/freebsd.c index cadd313c04..28bfd852c1 100644 --- a/tools/libs/call/freebsd.c +++ b/tools/libs/call/freebsd.c @@ -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 diff --git a/tools/libs/call/include/xencall.h b/tools/libs/call/include/xencall.h index bafacdd2ba..0d09bc8eae 100644 --- a/tools/libs/call/include/xencall.h +++ b/tools/libs/call/include/xencall.h @@ -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 /* diff --git a/tools/libs/call/libxencall.map b/tools/libs/call/libxencall.map index 2f96144f40..c482195b95 100644 --- a/tools/libs/call/libxencall.map +++ b/tools/libs/call/libxencall.map @@ -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; diff --git a/tools/libs/call/linux.c b/tools/libs/call/linux.c index 90c2691486..d8a6306e04 100644 --- a/tools/libs/call/linux.c +++ b/tools/libs/call/linux.c @@ -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 diff --git a/tools/libs/call/minios.c b/tools/libs/call/minios.c index f04688f63c..9f7a96995f 100644 --- a/tools/libs/call/minios.c +++ b/tools/libs/call/minios.c @@ -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 diff --git a/tools/libs/call/netbsd.c b/tools/libs/call/netbsd.c index e96fbf16f7..a5502da377 100644 --- a/tools/libs/call/netbsd.c +++ b/tools/libs/call/netbsd.c @@ -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 diff --git a/tools/libs/call/solaris.c b/tools/libs/call/solaris.c index 5aa330e4eb..c63b6a329a 100644 --- a/tools/libs/call/solaris.c +++ b/tools/libs/call/solaris.c @@ -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 -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |