[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] x86/platform: make XENPF_get_dom0_console actually usable



commit 7d43e4b2aa42b826e3d373b8e802ba925cc73088
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Mar 13 15:14:38 2023 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Mar 13 15:14:38 2023 +0100

    x86/platform: make XENPF_get_dom0_console actually usable
    
    struct dom0_vga_console_info has been extended in the past, and it may
    be extended again. The use in PV Dom0's start info already covers for
    that by supplying the size of the provided data. For the recently
    introduced platform-op size needs providing similarly. Go the easiest
    available route and simply supply size via the hypercall return value.
    
    While there also add a build-time check that possibly future growth of
    the struct won't affect xen_platform_op_t's size.
    
    Fixes: 4dd160583c79 ("x86/platform: introduce hypercall to get initial 
video console settings")
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/platform_hypercall.c | 2 ++
 xen/include/public/platform.h     | 6 +++++-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/xen/arch/x86/platform_hypercall.c 
b/xen/arch/x86/platform_hypercall.c
index 08ab2fea62..85c69c5be5 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -841,6 +841,8 @@ ret_t do_platform_op(
 
 #ifdef CONFIG_VIDEO
     case XENPF_get_dom0_console:
+        BUILD_BUG_ON(sizeof(op->u.dom0_console) > sizeof(op->u.pad));
+        ret = sizeof(op->u.dom0_console);
         if ( !fill_console_start_info(&op->u.dom0_console) )
         {
             ret = -ENODEV;
diff --git a/xen/include/public/platform.h b/xen/include/public/platform.h
index 14784dfa77..60caa5ce7e 100644
--- a/xen/include/public/platform.h
+++ b/xen/include/public/platform.h
@@ -605,7 +605,11 @@ struct xenpf_symdata {
 typedef struct xenpf_symdata xenpf_symdata_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_symdata_t);
 
-/* Fetch the video console information and mode setup by Xen. */
+/*
+ * Fetch the video console information and mode setup by Xen.  A non-
+ * negative return value indicates the size of the (part of the) structure
+ * which was filled.
+ */
 #define XENPF_get_dom0_console 64
 typedef struct dom0_vga_console_info xenpf_dom0_console_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_dom0_console_t);
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.