Commit Graph

448 Commits

Author SHA1 Message Date
6ddfc5ee52 Kernel: Invoke sys_stat when asked 2022-10-28 17:06:33 +02:00
16dc227a05 Kernel: Add UID and GID fields to Task 2022-10-28 17:06:13 +02:00
3effe8b004 Kernel: Add EACCES to std/errno.h 2022-10-28 17:02:27 +02:00
50cda50f01 Kernel, libc: Add F_GETFD, F_SETFD and FD_CLOEXEC 2022-10-27 17:17:24 +02:00
fcf53ef6a5 Kernel: Make waitpid() block by default unless WNOHANG is specified 2022-10-27 17:05:42 +02:00
06e6429567 Kernel: Reorganize a bit of scheduler code 2022-10-27 08:07:34 +02:00
f9dad8a8d6 Kernel, libc: Stub out struct stat.st_dev 2022-10-27 08:01:33 +02:00
9b0f6b6595 Kernel, libc: Add O_EXCL 2022-10-27 07:55:59 +02:00
1c35eabb2b open(): Add a third optional mode argument 2022-10-27 07:52:57 +02:00
a3c6635f3e Kernel, libc: Add O_APPEND and stub out O_CREAT and O_TRUNC 2022-10-27 07:43:55 +02:00
41f7232b77 Devices: Return EOF after first read for some devices
Still not optimal.
2022-10-26 20:54:47 +02:00
e1f58c0163 Kernel: If wrapping a line at screen bottom, scroll properly 2022-10-26 20:14:24 +02:00
a4e430d35e Kernel: count the null byte while calculating how much stack space argv will use 2022-10-26 20:05:24 +02:00
7d20c507b1 Kernel, libc, userspace: Implement command-line arguments (argv)
The only thing missing now is for sh to pass them on.
2022-10-26 18:57:06 +02:00
af452e2b2a Kernel, libc: Add dup2() 2022-10-25 18:58:06 +02:00
af46b8d9ac Kernel: Cleanup file descriptor validation 2022-10-25 18:35:17 +02:00
ec2c314234 Kernel: Add /dev/null 2022-10-25 17:59:55 +02:00
d458c5c848 Fix kernel/Makefile 2022-10-24 20:52:11 +02:00
0dec5f7bad libc: Add dummy getcwd() 2022-10-24 17:05:28 +02:00
58b01b74e2 Kernel, libc: Add stat() 2022-10-23 18:35:32 +02:00
0c04246300 Next version! 2022-10-23 17:24:18 +02:00
e457b88b04 Kernel, libc: Implement O_DIRECTORY and use that in dirent.h 2022-10-23 14:46:27 +02:00
8bf2904d74 libc: Implement a basic subset of dirent.h 2022-10-23 14:41:45 +02:00
14367f07b5 Kernel: Add support for getdents() to DeviceFS 2022-10-23 14:05:55 +02:00
78d72c2f0c Kernel, libc: Add a getdents() system call
This is meant to be a low-level interface to implement dirent.h on top of.
2022-10-23 14:03:46 +02:00
cf94ca2a4e Kernel: Update libk's string.h 2022-10-22 19:06:06 +02:00
437f51add7 Kernel: move over the mem* functions from libc 2022-10-22 19:04:35 +02:00
20429929dd InitRD: Bump up the filesystem limits 2022-10-22 17:23:22 +02:00
58ca030711 initrd: warn when failing to register stuff 2022-10-22 17:21:34 +02:00
fef7dd5867 Rename [moon-reaper] to [reaper] 2022-10-22 14:43:41 +02:00
bcdcfc4b45 Kernel: Add a pstat() system call
Not part of C or POSIX, but since there is no procfs right now, I thought it would be nice to have an interface to query process information.
It works like this: you pass the process ID and a pointer to a struct pstat (can be null).
If the process ID is -1, the kernel picks the process with the highest PID.
Then, if the pointer to a pstat struct is not null, the kernel fills it in with the process's information, and returns the process's PID.
2022-10-22 14:26:29 +02:00
6816a5b11f Scheduler: do not reboot on PID 1 exit if we are in a test 2022-10-22 11:56:08 +02:00
0faabe02e5 Kernel, libc: Implement O_CLOEXEC 2022-10-22 10:28:02 +02:00
b2f5a0502f Kernel, libc: Implement O_NONBLOCK 2022-10-21 21:51:03 +02:00
da61e3648f Kernel: Implement blocking reads
This is a huge step forward!! bc actually runs now, without echo or backspace, but it runs!!
2022-10-21 21:26:19 +02:00
bef9158450 Kernel, libc: Add isatty() and F_ISTTY to fcntl() 2022-10-21 18:34:31 +02:00
93207820b3 libc: Add a few errors to errno.h
As well as ino_t, which I forgot in the fstat() commit :)
2022-10-21 18:34:01 +02:00
fcf191aa7a Kernel, libc: Add fstat() 2022-10-21 18:31:09 +02:00
a06e1c5a21 VFS: Remove warning when file is not found
That is a common ocurrence.
2022-10-20 19:11:50 +02:00
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
1624f0360d exec: More logging 2022-10-15 17:47:57 +02:00
68403dc029 Kernel: Make AddressSpaces reference-counted 2022-10-15 17:40:33 +02:00
eca7227fda StackTracer: Stop when instruction is at nullptr 2022-10-15 17:31:57 +02:00
aca1367158 Kernel: Switch to strlcpy() as well
Surprisingly, most uses of strncpy() are in places where strncpy() is actually a better choice.
For example, copying to a fixed-length char array in a structure.
2022-10-15 17:30:34 +02:00
4bad782aad Kernel: Increment the maximum number of file descriptors a task can have
Doesn't use up more space in the Task structure, and now we are above the Minimum Acceptable Value as defined by POSIX (20), I think.
2022-10-15 14:20:29 +02:00
62a2bcf2ff Kernel: Add a clock() system call 2022-10-15 13:17:26 +02:00
3a9dddaa57 Kernel, libc: Remove the rand() system call
That's why we now have a VFS and a /dev pseudo-filesystem. To provide that kind of things.

Remember, everything is a file!!

The new way to ask the kernel for random numbers is to read from /dev/random.
2022-10-15 13:04:48 +02:00
613f8170b6 Kernel, libc: Implement mprotect() and use proper PROT_* values 2022-10-15 12:57:14 +02:00
62d631f1b4 Kernel: Rename assert.h to kassert.h so IDEs pickup the kernel header instead of the userspace one 2022-10-15 12:56:48 +02:00
1e86acd4c0 libc: Implement fcntl(F_DUPFD) and dup() 2022-10-15 11:16:34 +02:00
36bb1cab5c FileDescriptor: add operator=() so that the fcntl(F_DUPFD syscall compiles :) 2022-10-15 11:16:18 +02:00