f7cf395f71
Kernel, libc: Add access()
2022-10-20 19:03:24 +02:00
27448611b3
UserMemory: do not map refs into kernel memory
...
This is bad design. But it fails if mapped, since something overwrites KernelHeap.
2022-10-20 18:50:07 +02:00
712f4f5e51
KernelHeap: Add more debug logging
2022-10-20 18:49:33 +02:00
9d0dfbaedf
PMM: Log invalid frees
2022-10-20 18:49:12 +02:00
073c90e948
InitRD: leak an unused pointer so kmalloc() doesn't map memory all the time
2022-10-20 18:49:00 +02:00
cd9ecc1746
Kernel: Return EFAULT when the kernel believes the wstatus pointer is invalid
2022-10-20 08:20:56 +02:00
47bdfecedb
Devices: Add /dev/uptime
...
This file contains how many milliseconds have passed since boot at the time of reading it :)
2022-10-19 21:11:12 +02:00
1938a059a2
Kernel: Free the last spawned thread's PID on exit
2022-10-19 20:51:54 +02:00
51665a04b7
Kernel: Restart if init exits
2022-10-19 20:33:41 +02:00
7e9744419e
sh: Improve it
2022-10-19 20:16:21 +02:00
3c5c92c7c3
sh: Add a simple interactive shell
2022-10-19 19:42:05 +02:00
b035795eb3
Kernel: Move errno.h and (k)assert.h out of the main include directory
...
This is mostly so IDEs don't pick them up instead of the userspace headers :)
2022-10-19 17:41:23 +02:00
f3af3e252b
Kernel: refresh task_misbehave()
...
That function was severely outdated.
2022-10-19 17:26:36 +02:00
ef8ba3dec4
Kernel: Do not hang when a user task misbehaves
...
This was for testing/debugging. But we DEFINITELY don't want that.
2022-10-19 17:25:56 +02:00
656667812a
Kernel: reparent child processes to PID 1 when their parent exits
2022-10-19 17:16:01 +02:00
a29f7f8df2
Kernel: waitpid: support -1 as PID (wait for any child)
2022-10-19 17:15:30 +02:00
48d4a5910a
Kernel: Add a few convenience functions to manipulate userland memory
2022-10-19 17:13:16 +02:00
755242719c
VMM: Add a few memsets
...
This seems to fix exec() making weird page tables!!
2022-10-19 07:56:08 +02:00
671f2a2de3
Kernel, libc: Implement waitpid()
...
FIXME: exec() is now doing weird page table stuff. But at least it works, no panics :)
2022-10-18 21:30:52 +02:00
bb00e3c112
Kernel: Guard against recursive panics
...
Previously, when we panicked (page-fault for example) while dumping a kernel panic, it would just loop over and over again.
Now, we check if we were already in a panic, and limit the dump:
- No stack trace.
- Only a few registers.
- Only serial (since we can page fault while writing to the framebuffer)
This should make recursive panics much more difficult to achieve.
If we page-fault while writing to console, we don't even see a panic (not even in serial) and eventually triple-fault.
So this patch is actually more user-friendly.
2022-10-18 21:08:21 +02:00
59506b8852
Kernel: Show current_task's name in the log
2022-10-18 18:41:17 +02:00
52d391507d
Kernel: Rename the getpid() syscall to getprocid()
...
Now, we have one single system call to fetch all sorts of identifiers:
PID, PPID, UID, GID; EUID, EGID, and more...
2022-10-18 17:36:17 +02:00
a9d3bdba6f
Kernel: Keep track of a task's PPID
2022-10-18 17:18:37 +02:00
bdf1bb15a1
StackTracer: only show kernel addresses for now, until there are more checks
2022-10-18 17:14:09 +02:00
48d68a3e31
Kernel: Switch back to kernel address space on kernel panic
2022-10-18 17:13:43 +02:00
92d8c9d4d5
Next version!
2022-10-17 21:28:35 +02:00
4f41b9ed37
Scheduler: Implement a find_by_pid function
2022-10-17 20:40:38 +02:00
8b17065718
Kernel, libc: Rename gettid() to getpid() and move it to unistd.h
2022-10-17 20:08:44 +02:00
87ef210759
Kernel, libc: Remove spawn()
...
Now, fork() and exec() are both implemented. More POSIX-y, thus spawn can be removed.
2022-10-17 19:55:01 +02:00
a2c05de604
mmap(), mprotect(), munmap(): Check more stuff
2022-10-17 19:32:24 +02:00
593daba651
Kernel: Remove unused headers in main.cpp
2022-10-17 19:23:53 +02:00
ea8a42b8c0
Kernel: Add a name field to the Task structure
2022-10-17 19:12:47 +02:00
34fc6996b0
UserHeap: allocate needed memory in request_virtual_pages
2022-10-17 18:52:11 +02:00
92634048fc
UserHeap: some nice improvements
2022-10-17 18:49:19 +02:00
64f5078494
Kernel, libc: Implement fork()
...
This time for real.
Also, add a new per-user-task virtual address allocator (UserHeap), so that mmap'ed pages are in user range and can be copied.
2022-10-17 18:43:35 +02:00
966fdc76d7
Move userspace task to userspace memory
2022-10-17 17:30:05 +02:00
b334e1cd50
VMM: check if the entry is already present
2022-10-17 17:26:16 +02:00
682be58d97
AddressSpace: copy instead of linking
2022-10-17 17:24:33 +02:00
250db2c90f
Scheduler: add an append_task() function
2022-10-17 17:14:22 +02:00
c2fa4f380d
Kernel: Use the new Task member functions
2022-10-17 17:07:25 +02:00
ce10fb5743
fcntl(F_DUPFD): Allocate any file descriptor greater than or equal to arg
2022-10-17 17:01:22 +02:00
891651f2d6
Task: Move functions operating on Task to member functions
...
Also, add an alloc_fd_greater_than_or_equal() function, for use in fcntl(F_DUPFD)
2022-10-17 17:00:07 +02:00
e34045a78c
Kernel: on stack smashing detection, do not trigger a normal panic
...
That triggers stack traces, which we do not want in a stack smash fail situation
2022-10-16 19:04:24 +02:00
9b39d618de
Kernel, libc: Implement spawn()
...
This function is a Luna alternative to fork() and exec().
Why? Simply because I can't figure out for the life of me how to implement a working fork().
So meanwhile, we have spawn() as a replacement. exec() still exists, though.
2022-10-16 18:48:35 +02:00
a1146a5ce2
Panic: show panic message on screen
2022-10-16 18:23:33 +02:00
d2e2883a79
Kernel: Make mkdir() accessible to userspace
2022-10-16 17:22:12 +02:00
18fbccafb7
VFS: add an exists() function
2022-10-16 16:58:18 +02:00
d62eb6c791
Tests: Add test framework
2022-10-16 15:31:58 +02:00
f8154ce230
Kernel: Implement mkdir() from a single path
...
This is done using dirname() and basename() :)
2022-10-16 14:45:25 +02:00
8c0a57f0c2
Kernel: Copy strrchr, dirname and basename over from libc
2022-10-16 14:36:25 +02:00