From: Paul Durrant Date: Thu, 28 May 2020 15:13:30 +0000 (+0100) Subject: libxl: stop libxl_domain_info() consuming massive amounts of stack X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~117 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2c4b1a7efb15292c0360f305b64581ac135ab8f2;p=xen.git libxl: stop libxl_domain_info() consuming massive amounts of stack Currently an array of 1024 xc_domaininfo_t is declared on stack. That alone consumes ~112k. Since libxl_domain_info() creates a new gc this patch simply uses it to allocate the array instead. Signed-off-by: Paul Durrant Reviewed-by: Ian Jackson --- diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c index c08af308fa..39f08a6519 100644 --- a/tools/libxl/libxl_domain.c +++ b/tools/libxl/libxl_domain.c @@ -314,11 +314,13 @@ libxl_dominfo * libxl_list_domain(libxl_ctx *ctx, int *nb_domain_out) { libxl_dominfo *ptr = NULL; int i, ret; - xc_domaininfo_t info[1024]; + xc_domaininfo_t *info; int size = 0; uint32_t domid = 0; GC_INIT(ctx); + GCNEW_ARRAY(info, 1024); + while ((ret = xc_domain_getinfolist(ctx->xch, domid, 1024, info)) > 0) { ptr = libxl__realloc(NOGC, ptr, (size + ret) * sizeof(libxl_dominfo)); for (i = 0; i < ret; i++) {