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.l...@citrix.com>
---
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 <jbeul...@suse.com>
Cc: Andrew Cooper <andrew.coop...@citrix.com>
Cc: Paul Durrant <paul.durr...@citrix.com>
Cc: Roger Pau Monné <roger....@citrix.com>
---
 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@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to