WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [XEN] Add a warning about changeable size

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN] Add a warning about changeable size of shared_info structure.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Sat, 12 Aug 2006 18:30:19 +0000
Delivery-date: Sat, 12 Aug 2006 11:33:17 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxxx
# Node ID 0340e579f06544431e915d17596ac144145a077e
# Parent  9900884577de164941fd75fe3d7689c0e8210495
[XEN] Add a warning about changeable size of shared_info structure.

sizeof(shared_info_t) can change even in compatible hypervisor
versions.
Add a clear warning about this, and fix the few places relying on it.
In addition, add some padding to arch_shared_info, to allow future
additions to the structure without breaking known offsets of members
following it in the shared info.

Signed-off-by: John Levon <john.levon@xxxxxxx>
---
 tools/libxc/xc_hvm_build.c        |    2 +-
 tools/libxc/xc_linux_build.c      |    4 ++--
 tools/libxc/xc_linux_restore.c    |    2 +-
 xen/include/public/arch-ia64.h    |    2 ++
 xen/include/public/arch-powerpc.h |    1 +
 xen/include/public/arch-x86_32.h  |    1 +
 xen/include/public/arch-x86_64.h  |    1 +
 xen/include/public/xen.h          |    6 +++++-
 8 files changed, 14 insertions(+), 5 deletions(-)

diff -r 9900884577de -r 0340e579f065 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c        Sat Aug 12 15:58:52 2006 +0100
+++ b/tools/libxc/xc_hvm_build.c        Sat Aug 12 16:18:08 2006 +0100
@@ -303,7 +303,7 @@ static int setup_guest(int xc_handle,
               xc_handle, dom, PAGE_SIZE, PROT_READ | PROT_WRITE,
               shared_info_frame)) == 0 )
         goto error_out;
-    memset(shared_info, 0, sizeof(shared_info_t));
+    memset(shared_info, 0, PAGE_SIZE);
     /* Mask all upcalls... */
     for ( i = 0; i < MAX_VIRT_CPUS; i++ )
         shared_info->vcpu_info[i].evtchn_upcall_mask = 1;
diff -r 9900884577de -r 0340e579f065 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c      Sat Aug 12 15:58:52 2006 +0100
+++ b/tools/libxc/xc_linux_build.c      Sat Aug 12 16:18:08 2006 +0100
@@ -593,7 +593,7 @@ static int setup_guest(int xc_handle,
         xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, shared_info_frame);
     printf("shared_info = %p, err=%s frame=%lx\n",
            shared_info, strerror (errno), shared_info_frame);
-    //memset(shared_info, 0, sizeof(shared_info_t));
+    //memset(shared_info, 0, PAGE_SIZE);
     /* Mask all upcalls... */
     for ( i = 0; i < MAX_VIRT_CPUS; i++ )
         shared_info->vcpu_info[i].evtchn_upcall_mask = 1;
@@ -1064,7 +1064,7 @@ static int setup_guest(int xc_handle,
     /* shared_info page starts its life empty. */
     shared_info = xc_map_foreign_range(
         xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, shared_info_frame);
-    memset(shared_info, 0, sizeof(shared_info_t));
+    memset(shared_info, 0, PAGE_SIZE);
     /* Mask all upcalls... */
     for ( i = 0; i < MAX_VIRT_CPUS; i++ )
         shared_info->vcpu_info[i].evtchn_upcall_mask = 1;
diff -r 9900884577de -r 0340e579f065 tools/libxc/xc_linux_restore.c
--- a/tools/libxc/xc_linux_restore.c    Sat Aug 12 15:58:52 2006 +0100
+++ b/tools/libxc/xc_linux_restore.c    Sat Aug 12 16:18:08 2006 +0100
@@ -737,7 +737,7 @@ int xc_linux_restore(int xc_handle, int 
     /* Copy saved contents of shared-info page. No checking needed. */
     page = xc_map_foreign_range(
         xc_handle, dom, PAGE_SIZE, PROT_WRITE, shared_info_frame);
-    memcpy(page, shared_info, sizeof(shared_info_t));
+    memcpy(page, shared_info, PAGE_SIZE);
     munmap(page, PAGE_SIZE);
 
     /* Uncanonicalise the pfn-to-mfn table frame-number list. */
diff -r 9900884577de -r 0340e579f065 xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Sat Aug 12 15:58:52 2006 +0100
+++ b/xen/include/public/arch-ia64.h    Sat Aug 12 16:18:08 2006 +0100
@@ -297,6 +297,8 @@ struct arch_shared_info {
 
     /* Interrupt vector for event channel.  */
     int evtchn_vector;
+
+    uint64_t pad[32];
 };
 typedef struct arch_shared_info arch_shared_info_t;
 
diff -r 9900884577de -r 0340e579f065 xen/include/public/arch-powerpc.h
--- a/xen/include/public/arch-powerpc.h Sat Aug 12 15:58:52 2006 +0100
+++ b/xen/include/public/arch-powerpc.h Sat Aug 12 16:18:08 2006 +0100
@@ -107,6 +107,7 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_conte
 DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
 
 struct arch_shared_info {
+    uint64_t pad[32];
 };
 
 struct arch_vcpu_info {
diff -r 9900884577de -r 0340e579f065 xen/include/public/arch-x86_32.h
--- a/xen/include/public/arch-x86_32.h  Sat Aug 12 15:58:52 2006 +0100
+++ b/xen/include/public/arch-x86_32.h  Sat Aug 12 16:18:08 2006 +0100
@@ -191,6 +191,7 @@ struct arch_shared_info {
     /* Frame containing list of mfns containing list of mfns containing p2m. */
     xen_pfn_t     pfn_to_mfn_frame_list_list;
     unsigned long nmi_reason;
+    uint64_t pad[32];
 };
 typedef struct arch_shared_info arch_shared_info_t;
 
diff -r 9900884577de -r 0340e579f065 xen/include/public/arch-x86_64.h
--- a/xen/include/public/arch-x86_64.h  Sat Aug 12 15:58:52 2006 +0100
+++ b/xen/include/public/arch-x86_64.h  Sat Aug 12 16:18:08 2006 +0100
@@ -261,6 +261,7 @@ struct arch_shared_info {
     /* Frame containing list of mfns containing list of mfns containing p2m. */
     xen_pfn_t     pfn_to_mfn_frame_list_list;
     unsigned long nmi_reason;
+    uint64_t pad[32];
 };
 typedef struct arch_shared_info arch_shared_info_t;
 
diff -r 9900884577de -r 0340e579f065 xen/include/public/xen.h
--- a/xen/include/public/xen.h  Sat Aug 12 15:58:52 2006 +0100
+++ b/xen/include/public/xen.h  Sat Aug 12 16:18:08 2006 +0100
@@ -376,7 +376,11 @@ typedef struct vcpu_info vcpu_info_t;
 
 /*
  * Xen/kernel shared data -- pointer provided in start_info.
- * NB. We expect that this struct is smaller than a page.
+ *
+ * This structure is defined to be both smaller than a page, and the
+ * only data on the shared page, but may vary in actual size even within
+ * compatible Xen versions; guests should not rely on the size
+ * of this structure remaining constant.
  */
 struct shared_info {
     struct vcpu_info vcpu_info[MAX_VIRT_CPUS];

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN] Add a warning about changeable size of shared_info structure., Xen patchbot-unstable <=