[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH v12 for-xen-4.5 01/20] common/symbols: Export hypervisor symbols to privileged guest
- To: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>, jbeulich@xxxxxxxx, kevin.tian@xxxxxxxxx, suravee.suthikulpanit@xxxxxxx, Aravind.Gopalakrishnan@xxxxxxx, dietmar.hahn@xxxxxxxxxxxxxx
- From: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
- Date: Fri, 26 Sep 2014 17:43:29 -0400
- Cc: andrew.cooper3@xxxxxxxxxx, xen-devel@xxxxxxxxxxxxx, keir@xxxxxxx, jun.nakajima@xxxxxxxxx, tim@xxxxxxx
- Delivery-date: Fri, 26 Sep 2014 21:44:24 +0000
- List-id: Xen developer discussion <xen-devel.lists.xen.org>
On 09/25/2014 03:28 PM, Boris Ostrovsky wrote:
Export Xen's symbols as {<address><type><name>} triplet via new XENPF_get_symbol
hypercall
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Reviewed-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx>
Tested-by: Dietmar Hahn <dietmar.hahn@xxxxxxxxxxxxxx>
For the XSM parts:
Acked-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
One comment on the patch in general (outside the XSM parts):
[...]
diff --git a/xen/arch/x86/platform_hypercall.c
b/xen/arch/x86/platform_hypercall.c
index 2162811..68bc6d9 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -23,6 +23,7 @@
#include <xen/cpu.h>
#include <xen/pmstat.h>
#include <xen/irq.h>
+#include <xen/symbols.h>
#include <asm/current.h>
#include <public/platform.h>
#include <acpi/cpufreq/processor_perf.h>
@@ -601,6 +602,38 @@ ret_t
do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
}
break;
+ case XENPF_get_symbol:
+ {
+ static char name[KSYM_NAME_LEN + 1]; /* protected by xenpf_lock */
+ XEN_GUEST_HANDLE(char) nameh;
+ uint32_t namelen, copylen;
+
+ guest_from_compat_handle(nameh, op->u.symdata.name);
+
+ ret = xensyms_read(&op->u.symdata.symnum, &op->u.symdata.type,
+ &op->u.symdata.address, name);
+
+ namelen = strlen(name) + 1;
+
+ if ( namelen > op->u.symdata.namelen )
+ {
+ /* Caller's buffer is too small for the whole string */
+ if ( op->u.symdata.namelen )
+ name[op->u.symdata.namelen] = '\0';
I don't think this assignment is needed at all: name[copylen] is never
copied to the guest and the buffer is not reused internally.
+ copylen = op->u.symdata.namelen;
+ }
+ else
+ copylen = namelen;
+
+ op->u.symdata.namelen = namelen;
+
+ if ( !ret && copy_to_guest(nameh, name, copylen) )
+ ret = -EFAULT;
+ if ( !ret && __copy_field_to_guest(u_xenpf_op, op, u.symdata) )
+ ret = -EFAULT;
+ }
+ break;
+
default:
ret = -ENOSYS;
break;
[...]
--
Daniel De Graaf
National Security Agency
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|