|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-changelog
[Xen-changelog] [xen-unstable] [XEN] Change microcode_update	function in
 
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 609b10b17bf005cc70ae331a46385bf7ad25845c
# Parent  eee52c100996efd39fb3f9bc7b43c75808927f2a
[XEN] Change microcode_update function interface inside Xen.
Confine the knowledge that the buffer gets accessed without use of
proper guest handle accessors to a single file.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/arch/x86/microcode.c          |   11 ++++++++---
 xen/arch/x86/platform_hypercall.c |    4 ++--
 2 files changed, 10 insertions(+), 5 deletions(-)
diff -r eee52c100996 -r 609b10b17bf0 xen/arch/x86/microcode.c
--- a/xen/arch/x86/microcode.c  Thu Oct 05 16:36:39 2006 +0100
+++ b/xen/arch/x86/microcode.c  Thu Oct 05 16:38:30 2006 +0100
@@ -455,7 +455,7 @@ out:
        return error;
 }
 
-int microcode_update(void *buf, unsigned long len)
+int microcode_update(XEN_GUEST_HANDLE(void) buf, unsigned long len)
 {
        int ret;
 
@@ -464,10 +464,15 @@ int microcode_update(void *buf, unsigned
                return -EINVAL;
        }
 
+       if (len != (typeof(user_buffer_size))len) {
+               printk(KERN_ERR "microcode: too much data\n");
+               return -E2BIG;
+       }
+
        mutex_lock(µcode_mutex);
 
-       user_buffer = (void __user *) buf;
-       user_buffer_size = (int) len;
+       user_buffer = buf.p;
+       user_buffer_size = len;
 
        ret = do_microcode_update();
 
diff -r eee52c100996 -r 609b10b17bf0 xen/arch/x86/platform_hypercall.c
--- a/xen/arch/x86/platform_hypercall.c Thu Oct 05 16:36:39 2006 +0100
+++ b/xen/arch/x86/platform_hypercall.c Thu Oct 05 16:38:30 2006 +0100
@@ -104,8 +104,8 @@ long do_platform_op(XEN_GUEST_HANDLE(xen
 
     case XENPF_microcode_update:
     {
-        extern int microcode_update(void *buf, unsigned long len);
-        ret = microcode_update(op->u.microcode.data.p,
+        extern int microcode_update(XEN_GUEST_HANDLE(void), unsigned long len);
+        ret = microcode_update(op->u.microcode.data,
                                op->u.microcode.length);
     }
     break;
_______________________________________________
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] Change microcode_update	function interface inside Xen.,
Xen patchbot-unstable <=
  
 |  
  
 | 
    | 
  
  
    |   | 
    |