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

[Xen-devel] [BUGFIX][PATCH 4/4] hvm_save_one: allow the 2nd instance to be fetched for PIC.



From: Don Slutz <dslutz@xxxxxxxxxxx>

In this case hvm_sr_handlers[typecode].size is 2x the struct size.
So use the saved size (length) to look at each possible instance.

Signed-off-by: Don Slutz <dslutz@xxxxxxxxxxx>
---
 xen/common/hvm/save.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/xen/common/hvm/save.c b/xen/common/hvm/save.c
index ff6e910..f4138b4 100644
--- a/xen/common/hvm/save.c
+++ b/xen/common/hvm/save.c
@@ -98,9 +98,6 @@ int hvm_save_one(struct domain *d, uint16_t typecode, 
uint16_t instance,
     else 
         sz = hvm_sr_handlers[typecode].size;
     
-    if ( (instance + 1) * hvm_sr_handlers[typecode].size > sz )
-        return -EINVAL;
-
     ctxt.size = sz;
     ctxt.data = xmalloc_bytes(sz);
     if ( !ctxt.data )
@@ -114,20 +111,20 @@ int hvm_save_one(struct domain *d, uint16_t typecode, 
uint16_t instance,
     }
     else
     {
-        uint32_t off;
+        uint32_t off, add;
 
         rv = -EBADSLT;
-        for (off = 0; off < ctxt.cur; off += hvm_sr_handlers[typecode].size) {
+        for (off = 0; off < ctxt.cur; off += add + sizeof (struct 
hvm_save_descriptor)) {
             struct hvm_save_descriptor *desc
                    = (struct hvm_save_descriptor *)&ctxt.data[off];
+            add = desc->length;
             if (instance == desc->instance) {
                 rv = 0;
                 if ( copy_to_guest(handle,
                                    ctxt.data
                                    + off
                                    + sizeof (struct hvm_save_descriptor),
-                                   hvm_sr_handlers[typecode].size
-                                   - sizeof (struct hvm_save_descriptor)) )
+                                   add) )
                     rv = -EFAULT;
                 break;
             }
-- 
1.8.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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