From: Dmitry Isaykin Date: Fri, 1 Oct 2021 12:24:16 +0000 (+0300) Subject: tools/xl: fix autoballoon regex X-Git-Tag: archive/raspbian/4.16.0+51-g0941d6cb-1+rpi1~2^2~42^2~101 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2faeb4213d9b412836fe80e5685bfcccc51feb92;p=xen.git tools/xl: fix autoballoon regex This regex is used for auto-balloon mode detection based on Xen command line. The case of specifying a negative size was handled incorrectly. >From misc/xen-command-line documentation: dom0_mem (x86) = List of ( min: | max: | ) If a size is positive, it represents an absolute value. If a size is negative, it is subtracted from the total available memory. Also add support for [tT] granularity suffix. Also add support for memory fractions (i.e. '50%' or '1G+25%'). Signed-off-by: Dmitry Isaykin Reviewed-by: Anthony PERARD --- diff --git a/tools/xl/xl.c b/tools/xl/xl.c index 4107d10fd4..f422f9fed5 100644 --- a/tools/xl/xl.c +++ b/tools/xl/xl.c @@ -80,14 +80,20 @@ static int auto_autoballoon(void) if (!info) return 1; /* default to on */ +#define SIZE_PATTERN "-?[0-9]+[bBkKmMgGtT]?" + ret = regcomp(®ex, - "(^| )dom0_mem=((|min:|max:)[0-9]+[bBkKmMgG]?,?)+($| )", + "(^| )dom0_mem=((|min:|max:)(" SIZE_PATTERN "|(" SIZE_PATTERN "\\+)?[0-9]{1,2}%),?)+($| )", REG_NOSUB | REG_EXTENDED); + +#undef SIZE_PATTERN + if (ret) return 1; ret = regexec(®ex, info->commandline, 0, NULL, 0); regfree(®ex); + return ret == REG_NOMATCH; }