From fd002564a669874e2ea5800b82d28738f12e1c13 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 8 Jul 2026 18:50:31 +0200 Subject: [PATCH] feat: Validate custom QEMU CPU arguments (#1237) --- src/proc.sh | 73 ++++++++++++++++++++--------------------------------- 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/src/proc.sh b/src/proc.sh index d58564b..9803680 100644 --- a/src/proc.sh +++ b/src/proc.sh @@ -53,6 +53,32 @@ checkSse42() { return 0 } +trimSpaces() { + + local value="$1" + + value="${value#"${value%%[![:space:]]*}"}" + value="${value%"${value##*[![:space:]]}"}" + + echo "$value" + return 0 +} + +removeCpuArgument() { + + local args=" ${ARGUMENTS:-} " + + while [[ "$args" =~ [[:space:]]-cpu([[:space:]][^[:space:]]+|=[^[:space:]]+)? ]]; do + local cpu="${BASH_REMATCH[0]}" + args="${args/$cpu/ }" + warn "Ignoring '${cpu#" "}' from ARGUMENTS, use CPU_MODEL and CPU_FLAGS instead." + done + + ARGUMENTS=$(trimSpaces "$args") + + return 0 +} + configureKvmCpuModel() { CPU_FEATURES="kvm=on,l3-cache=on,+hypervisor" @@ -130,52 +156,9 @@ configureTcg() { return 0 } -extractHostCpuArgument() { - - local args prefix suffix param - - if [[ "$ARGUMENTS" == *"-cpu host,"* ]]; then - - args="${ARGUMENTS} " - prefix="${args/-cpu host,*/}" - suffix="${args/*-cpu host,/}" - param="${suffix%% *}" - suffix="${suffix#* }" - args="${prefix}${suffix}" - ARGUMENTS="${args::-1}" - - if [ -z "$CPU_FLAGS" ]; then - CPU_FLAGS="$param" - else - CPU_FLAGS+=",$param" - fi - - else - - if [[ "$ARGUMENTS" == *"-cpu host"* ]]; then - ARGUMENTS="${ARGUMENTS//-cpu host/}" - fi - - fi - - return 0 -} - composeCpuFlags() { - if [ -z "$CPU_FLAGS" ]; then - if [ -z "$CPU_FEATURES" ]; then - CPU_FLAGS="$CPU_MODEL" - else - CPU_FLAGS="$CPU_MODEL,$CPU_FEATURES" - fi - else - if [ -z "$CPU_FEATURES" ]; then - CPU_FLAGS="$CPU_MODEL,$CPU_FLAGS" - else - CPU_FLAGS="$CPU_MODEL,$CPU_FEATURES,$CPU_FLAGS" - fi - fi + CPU_FLAGS="${CPU_MODEL}${CPU_FEATURES:+,$CPU_FEATURES}${CPU_FLAGS:+,$CPU_FLAGS}" return 0 } @@ -211,7 +194,7 @@ else configureTcg fi -extractHostCpuArgument +removeCpuArgument composeCpuFlags configureHostCpuName