From 4589df0fc1eb4bcb09ee65d33c34136a1372bdb2 Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Fri, 23 Jan 2026 18:08:33 +0100 Subject: executor: introduce global state page for SYZOS Reserve a dedicated 4KB page at X86_SYZOS_ADDR_GLOBALS (0x17F000) to store global state shared across the SYZOS L1 guest environment. This region is required to store the state of the guest-side memory allocator (specifically the allocation offset and total size of the unused heap), enabling thread-safe dynamic memory allocation for nested L2 page tables. --- executor/common_kvm_amd64.h | 2 ++ executor/kvm.h | 3 +++ 2 files changed, 5 insertions(+) (limited to 'executor') diff --git a/executor/common_kvm_amd64.h b/executor/common_kvm_amd64.h index 06efc7f20..12bc8958d 100644 --- a/executor/common_kvm_amd64.h +++ b/executor/common_kvm_amd64.h @@ -237,6 +237,8 @@ static const struct mem_region syzos_mem_regions[] = { {X86_SYZOS_ADDR_BOOT_ARGS, 1, 0}, // Dynamic Page Table Pool. {X86_SYZOS_ADDR_PT_POOL, X86_SYZOS_PT_POOL_SIZE, 0}, + // Global State Page. + {X86_SYZOS_ADDR_GLOBALS, 1, 0}, // SMRAM memory. {X86_SYZOS_ADDR_SMRAM, 10, 0}, // Unmapped region to trigger a page faults for uexits etc. diff --git a/executor/kvm.h b/executor/kvm.h index f377887a6..b0630c161 100644 --- a/executor/kvm.h +++ b/executor/kvm.h @@ -76,6 +76,9 @@ // Base offset for the area containing the 4 L2 VM slots. #define X86_SYZOS_L1_VCPU_OFFSET_L2_VMS_AREA 0x1000 +// Global state page (Allocator offsets, etc). +#define X86_SYZOS_ADDR_GLOBALS 0x17F000 + // Separated Page Table Pool in high memory. // Located above L2 VCPU regions. #define X86_SYZOS_ADDR_PT_POOL 0x180000 -- cgit mrf-deployment