From 7cccc1fb9951f91d91fe72114b39585e5b428384 Mon Sep 17 00:00:00 2001
From: dzwdz
Date: Tue, 30 Aug 2022 11:01:28 +0200
Subject: set up the stack in user/bootstrap instead of the kernel

---
 src/kernel/proc.c     | 5 -----
 src/kernel/syscalls.c | 9 +++++----
 2 files changed, 5 insertions(+), 9 deletions(-)

(limited to 'src/kernel')

diff --git a/src/kernel/proc.c b/src/kernel/proc.c
index 7b8e659..71d1f44 100644
--- a/src/kernel/proc.c
+++ b/src/kernel/proc.c
@@ -29,11 +29,6 @@ struct process *process_seed(void *data, size_t datalen) {
 	process_first->id    = next_pid++;
 	process_first->_handles = kzalloc(sizeof(struct handle) * HANDLE_MAX);
 
-	// map the stack to the last page in memory
-	// TODO move to user bootstrap
-	pagedir_map(process_first->pages, (userptr_t)~PAGE_MASK, page_zalloc(1), true, true);
-	process_first->regs.rsp = (userptr_t) ~0xF;
-
 	// map .shared
 	extern char _shared_len;
 	for (size_t p = 0; p < (size_t)&_shared_len; p += PAGE_SIZE)
diff --git a/src/kernel/syscalls.c b/src/kernel/syscalls.c
index 9f77679..37a0ce3 100644
--- a/src/kernel/syscalls.c
+++ b/src/kernel/syscalls.c
@@ -317,17 +317,18 @@ void __user *_syscall_memflag(void __user *addr, size_t len, int flags) {
 	}
 
 
-	for (userptr_t iter = addr; iter < addr + len; iter += PAGE_SIZE) {
-		if (pagedir_iskern(pages, iter)) {
+	for (size_t off = 0; off < len; off += PAGE_SIZE) {
+		userptr_t page = addr + off;
+		if (pagedir_iskern(pages, page)) {
 			// TODO reflect failure in return value
 			continue;
 		}
 
-		phys = pagedir_virt2phys(pages, iter, false, false);
+		phys = pagedir_virt2phys(pages, page, false, false);
 		if (!phys) {
 			// TODO test zeroing of user pages
 			phys = page_zalloc(1);
-			pagedir_map(pages, iter, phys, true, true);
+			pagedir_map(pages, page, phys, true, true);
 		}
 	}
 	SYSCALL_RETURN((uintptr_t)addr);
-- 
cgit v1.2.3