diff options
| author | Ada Christine <adachristine18@gmail.com> | 2025-02-02 16:11:35 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2025-02-02 16:11:35 +0000 |
| commit | 6b9c30f9f35e9094762a96a861f0fa978c8e095d (patch) | |
| tree | 32392c85e18c9591fa4afbeecf0b4e620d642b75 /boot/fake_syscall.c | |
| parent | 966cdf0b81ba40f0fd1b0c4b476bf7c35804ae6c (diff) | |
buffer for stack, permit cleanup
Diffstat (limited to 'boot/fake_syscall.c')
| -rw-r--r-- | boot/fake_syscall.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/boot/fake_syscall.c b/boot/fake_syscall.c index e2aaeca..0e94515 100644 --- a/boot/fake_syscall.c +++ b/boot/fake_syscall.c @@ -215,11 +215,11 @@ static void install_syscall_handler(void) msr_write(MSR_INDEX_EFER, efer); } -static void *create_fake_syscall_stack(void *entry_addr) +static void *create_fake_syscall_stack(void *entry_addr, struct linear_buffer *stack_buffer) { - constexpr size_t fake_syscall_stack_size = 0x20000; // 128KiB stack - char *stack_pointer_base = mmap(nullptr, fake_syscall_stack_size, 0, 0, -1, 0); - void *stack_pointer_head = stack_pointer_base + fake_syscall_stack_size; + stack_buffer->length = KJARNA_BOOT_STACK_SIZE; + stack_buffer->base = mmap(nullptr, stack_buffer->length, 0, 0, -1, 0); + void *stack_pointer_head = stack_buffer->base + stack_buffer->length; struct syscall_context *context = stack_alloc(&stack_pointer_head, sizeof(*context)); @@ -236,7 +236,7 @@ static void *create_fake_syscall_stack(void *entry_addr) int64_t fake_syscall_start(struct kjarna_boot_image *image) { install_syscall_handler(); - void *fake_stack = create_fake_syscall_stack((void *)image->entry); + void *fake_stack = create_fake_syscall_stack((void *)image->entry, &image->stack_buffer); save_system_context(); int64_t result = fake_syscall_begin(fake_stack, &exit_fake_syscall_stack); return result; |
