]> xenbits.xensource.com Git - people/dwmw2/xen.git/commitdiff
tools/libxl: Fixes to libxl__domain_set_paging_mempool_size()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 18 Nov 2022 16:53:45 +0000 (16:53 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 21 Nov 2022 16:12:41 +0000 (16:12 +0000)
The error message accidentally printed the bytes value as if it were kB.

Furthermore, both b_info.shadow_memkb and shadow_mem are uint64_t, meaning
there is a risk of overflow if the user specified a stupidly large value in
the vm.cfg file.  Check and reject such a condition.

Fixes: 7c3bbd940dd8 ("xen/arm, libxl: Revert XEN_DOMCTL_shadow_op; use p2m mempool hypercalls")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
Release-acked-by: Henry Wang <Henry.Wang@arm.com>
tools/libs/light/libxl_dom.c

index fa5c79e4f6509679774d5e34bef607e4030d8d9e..b454f988fbc55cd3589f44d72be5d7153fb9590e 100644 (file)
@@ -1458,10 +1458,18 @@ int libxl__domain_set_paging_mempool_size(
     shadow_mem = d_config->b_info.shadow_memkb;
     shadow_mem <<= 10;
 
+    if ((shadow_mem >> 10) != d_config->b_info.shadow_memkb) {
+        LOGED(ERROR, domid,
+              "shadow_memkb value %"PRIu64"kB too large",
+              d_config->b_info.shadow_memkb);
+        return ERROR_FAIL;
+    }
+
     int r = xc_set_paging_mempool_size(CTX->xch, domid, shadow_mem);
     if (r) {
         LOGED(ERROR, domid,
-              "Failed to set paging mempool size to %"PRIu64"kB", shadow_mem);
+              "Failed to set paging mempool size to %"PRIu64"kB",
+              d_config->b_info.shadow_memkb);
         return ERROR_FAIL;
     }