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

[Xen-devel] [PATCH] x86/vpci: validate data first in register_vpci_mmcfg_handler



Avoid the need to deallocate memory when the data is invalid. It has
the benefit to not fragment memory in Xen.

Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
Found by code inspection. There shouldn't be any practical difference
in our current setup because the function is hardware domain only.
But ISTM the plan is to make this available to DomU in the future so
we'd better be careful about buggy / malicious guests.

Cc: Jan Beulich <jbeulich@xxxxxxxx>
Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Cc: Paul Durrant <paul.durrant@xxxxxxxxxx>
Cc: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 xen/arch/x86/hvm/io.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/xen/arch/x86/hvm/io.c b/xen/arch/x86/hvm/io.c
index 556810c126..9af5e3fee6 100644
--- a/xen/arch/x86/hvm/io.c
+++ b/xen/arch/x86/hvm/io.c
@@ -511,18 +511,16 @@ int register_vpci_mmcfg_handler(struct domain *d, paddr_t 
addr,
                                 unsigned int start_bus, unsigned int end_bus,
                                 unsigned int seg)
 {
-    struct hvm_mmcfg *mmcfg, *new = xmalloc(struct hvm_mmcfg);
+    struct hvm_mmcfg *mmcfg, *new;
 
     ASSERT(is_hardware_domain(d));
 
-    if ( !new )
-        return -ENOMEM;
-
     if ( start_bus > end_bus )
-    {
-        xfree(new);
         return -EINVAL;
-    }
+
+    new = xmalloc(struct hvm_mmcfg);
+    if ( !new )
+        return -ENOMEM;
 
     new->addr = addr + (start_bus << 20);
     new->start_bus = start_bus;
-- 
2.11.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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