[PATCH] tools/ocaml: fill arch_config for ARM in domain_getinfolist
Julian Vetter <[email protected]>
| Newsgroups | org.xenproject.lists.xen-devel |
|---|---|
| Message-ID | <1785143496.8631fc262581453bbf619ec5b2062170.19fa2d80d54000e099@vates.tech> |
In the function alloc_domaininfo() the arch_config field in domaininfo is only filled inside #if defined(__i386__) || defined(__x86_64__). On ARM the field is left unpopulated. caml_alloc_tuple() does not zero new blocks, so di.Xenctrl.arch_config on ARM is uninitialised garbage for every caller of Xenctrl.domain_getinfolist/domain_getinfo. Any toolstack dereferencing that value, segfaults once a VM is enumerated in a domain scan. Add the missing ARM equivalent, populating xen_arm_arch_domainconfig from the raw xc_domaininfo_t the same way the x86 branch does for xen_x86_arch_domainconfig. Signed-off-by: Julian Vetter <[email protected]> --- tools/ocaml/libs/xc/xenctrl_stubs.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tools/ocaml/libs/xc/xenctrl_stubs.c b/tools/ocaml/libs/xc/xenctrl_stubs.c index 7f6381cdd2..b60ea9f12e 100644 --- a/tools/ocaml/libs/xc/xenctrl_stubs.c +++ b/tools/ocaml/libs/xc/xenctrl_stubs.c @@ -415,6 +415,7 @@ static value alloc_domaininfo(xc_domaininfo_t * info) { CAMLparam0(); CAMLlocal5(result, tmp, arch_config, x86_arch_config, emul_list); + CAMLlocal1(arm_arch_config); int i; result = caml_alloc_tuple(17); @@ -460,6 +461,19 @@ static value alloc_domaininfo(xc_domaininfo_t * info) Store_field(arch_config, 0, x86_arch_config); + Store_field(result, 16, arch_config); +#elif defined(__arm__) || defined(__aarch64__) + /* xen_arm_arch_domainconfig */ + arm_arch_config = caml_alloc_tuple(3); + Store_field(arm_arch_config, 0, Val_int(info->arch_config.gic_version)); + Store_field(arm_arch_config, 1, Val_int(info->arch_config.nr_spis)); + Store_field(arm_arch_config, 2, caml_copy_int32(info->arch_config.clock_frequency)); + + /* arch_config: arch_domainconfig */ + arch_config = caml_alloc_small(1, 0); + + Store_field(arch_config, 0, arm_arch_config); + Store_field(result, 16, arch_config); #endif -- 2.53.0 -- Julian Vetter | Vates Hypervisor & Kernel Developer XCP-ng & Xen Orchestra - Vates solutions web: https://vates.tech