From d2b15299a54eded0e137d78a5edf1ad155cbb86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B0=E6=9C=94?= <565183519@qq.com> Date: Sat, 15 Aug 2026 22:34:27 +0800 Subject: [PATCH] fix(guanghu-os): trust versioned subcontrol backend link --- .../scripts/guanghu-supervisor-control-bridge.sh | 7 ++++++- .../scripts/test-guanghu-supervisor-control-bridge.sh | 5 +++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/product-source/hololake-platform/guanghu-os/scripts/guanghu-supervisor-control-bridge.sh b/product-source/hololake-platform/guanghu-os/scripts/guanghu-supervisor-control-bridge.sh index fbd5bf731..b5c7a19a8 100644 --- a/product-source/hololake-platform/guanghu-os/scripts/guanghu-supervisor-control-bridge.sh +++ b/product-source/hololake-platform/guanghu-os/scripts/guanghu-supervisor-control-bridge.sh @@ -60,7 +60,12 @@ else [[ "${current_root}" =~ ^/guanghu/versions/[A-Za-z0-9._-]+$ ]] || die "current root is invalid" fi [[ "${code_unit}" == "hlcc-jd-candidate.service" ]] || die "code unit binding mismatch" -[[ -x "${backend_command}" && ! -L "${backend_command}" ]] || die "subcontrol backend is unavailable" +[[ -x "${backend_command}" ]] || die "subcontrol backend is unavailable" +if [[ "${test_mode}" != 1 ]]; then + resolved_backend=$(readlink -f "${backend_command}") + [[ "${resolved_backend}" =~ ^/guanghu/versions/[A-Za-z0-9._-]+/bin/guanghu-linux-subcontrol-backend$ ]] || + die "subcontrol backend target is outside the versioned Guanghu root" +fi [[ -x "${systemctl_bin}" ]] || die "systemctl is unavailable" verify_machine() { diff --git a/product-source/hololake-platform/guanghu-os/scripts/test-guanghu-supervisor-control-bridge.sh b/product-source/hololake-platform/guanghu-os/scripts/test-guanghu-supervisor-control-bridge.sh index 4e300ef59..dc7ac8b23 100644 --- a/product-source/hololake-platform/guanghu-os/scripts/test-guanghu-supervisor-control-bridge.sh +++ b/product-source/hololake-platform/guanghu-os/scripts/test-guanghu-supervisor-control-bridge.sh @@ -11,12 +11,13 @@ ln -sfn "${fixture}/versions/test-supervisor-world" "${fixture}/current" printf '%s\n' 'f3d4b730-7f02-452f-975b-7091a4800431' >"${fixture}/dmi" printf '%s\n' "menuentry 'Ubuntu' --id 'rescue-slot' {" >"${fixture}/grub.cfg" -cat >"${fixture}/backend" <<'EOF' +cat >"${fixture}/backend-real" <<'EOF' #!/usr/bin/env bash [[ "${1:-}" == preflight || "${1:-}" == observe ]] || exit 1 if [[ "${1:-}" == observe ]]; then echo dormant; fi EOF -chmod +x "${fixture}/backend" +chmod +x "${fixture}/backend-real" +ln -s "${fixture}/backend-real" "${fixture}/backend" cat >"${fixture}/systemctl" <<'EOF' #!/usr/bin/env bash