Commit Graph

80 Commits

Author SHA1 Message Date
b8f81502b8
kernel: Fix some debug messages that are not shown by default 2023-08-16 09:03:25 +02:00
a98df9e743
kernel: Return EACCES when trying to apply execpromises to a setuid program
Closes #41.
2023-08-14 09:50:52 +02:00
e2a77bb3da
kernel+libc: Add pledge support
Some checks failed
continuous-integration/drone/push Build is failing
2023-08-12 21:38:25 +02:00
10c892d606
kernel: Allow null envp in execve()
As far as I know, this is not standard, but I'm doing this as a convenience for programs using exec() right after clearenv().
2023-08-07 22:48:21 +02:00
bc20e1a31b
kernel: Store FD_CLOEXEC in the file descriptor itself
All checks were successful
continuous-integration/drone/push Build is passing
Closes #39.
2023-08-03 17:47:18 +02:00
dc35c42371
kernel/VFS: Rework the metadata system so that there is a single metadata struct
All checks were successful
continuous-integration/drone/push Build is passing
2023-08-01 17:20:28 +02:00
4c87d72b44
kernel/binfmt: Add documentation + support script interpreters being scripts themselves
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-31 20:41:18 +02:00
3638d3da46
kernel: Add binary format for shebang scripts 2023-07-30 18:46:19 +02:00
1c76675e40
kernel: Add a framework to add more executable formats, possibly from userspace
This lets us implement shebangs and possibly an interface similar to Linux's binfmt_misc.
2023-07-30 18:25:44 +02:00
fb08594a18
kernel: Separate FileDescriptors and OpenFileDescription
Also, add a did_close() callback for OpenFileDescriptions losing all their references.
2023-07-30 11:33:06 +02:00
11df5a2ec3
kernel: Use pid_t internally for process IDs
All checks were successful
continuous-integration/drone/push Build is passing
This removes a bunch of casts between pid_t and u64, and makes more sense since pid_t is literally the data type for process IDs.
2023-07-26 21:32:00 +02:00
7328cfe734
kernel: Add basic process groups
All checks were successful
continuous-integration/drone/push Build is passing
2023-07-11 11:51:07 +02:00
15d6aae701
kernel+libc: Implement basic signals 2023-07-10 19:46:57 +02:00
5e564e9ae3
kernel: Move Thread::self_directory to UserVM
Since this is only used by user threads, UserVM is a convenient/related place to store the PageDirectory in a RAII manner.
2023-07-09 20:32:42 +02:00
e9e7b22323
kernel: Separate a thread's page directory into two
All checks were successful
continuous-integration/drone/pr Build is passing
The self directory, and the active directory. The active directory is the one the thread is currently using,
and the self directory is the one the thread owns.

This lets us keep track of both, which fixes ext2 executables crashing the system.
2023-06-25 20:35:40 +02:00
b7bdec9ece
kernel: Add a bunch more config definitions and hide debug messages behind them 2023-06-18 20:18:00 +02:00
b0506bf88f
kernel: Add umask
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-26 22:27:49 +02:00
8f6bd29da3
kernel: Make file system reference counting work for current directories
All checks were successful
continuous-integration/drone/push Build is passing
Also, make pipes usable again.
2023-05-17 20:37:01 +02:00
1f4c4928cc
kernel+libc+apps: Add mount and umount syscalls, libc wrappers, and utilities
All checks were successful
continuous-integration/drone/push Build is passing
2023-05-17 20:30:15 +02:00
4616997f5b
kernel: Store a thread's parent directly instead of its parent's PID 2023-05-04 22:58:04 +02:00
44e4ca804a
kernel: Make sure argument vectors passed to execve() are not too big 2023-05-04 16:36:24 +02:00
0c1d33f2ec
kernel: Move some files into subdirectories
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-28 15:55:06 +02:00
df95126ccd
kernel: Remove unneeded debug logs & random cleanups
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-14 21:10:38 +02:00
7db215819e
exec: Respect the program's working directory 2023-04-11 22:44:25 +02:00
2d30935fdb
kernel: Give each thread a working directory 2023-04-11 22:14:57 +02:00
3887b98a7d
kernel: Support setuid binaries
All checks were successful
continuous-integration/drone/push Build is passing
You still have to run "chmod 4755 /bin/su" as root inside Luna for now, as this is not done by the install scripts.
2023-04-08 16:32:56 +02:00
f6f9254eb4
kernel: Add process and filesystem UIDs and GIDs 2023-04-08 13:12:49 +02:00
3a28771520
kernel+libc+apps: Add support for environment variables 2023-04-07 15:03:38 +02:00
3a70accdeb
kernel: Move copy_string_vector_to_userspace to ThreadImage 2023-04-07 14:36:24 +02:00
b22bea84ec
kernel: Copy process name on fork()
All checks were successful
continuous-integration/drone/push Build is passing
2023-04-07 14:02:36 +02:00
b6c35124d6
libluna: OwnedStringView -> String
Also with inline storage!
2023-03-29 17:28:22 +02:00
0de41410c6
kernel: Use path as the new process name instead of argv[0] 2023-03-24 21:26:45 +01:00
36e48b2ad2
kernel: Do not attempt to close non-existent FDs on exec() 2023-03-24 21:21:13 +01:00
374a9ff7b8
kernel+libc: Implement O_CLOEXEC 2023-03-24 21:19:24 +01:00
d48d0efb07
kernel: Add names to threads
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-24 21:05:38 +01:00
7efcc06090
kernel+init+sh: Implement parent processes and waitpid(-1, ...)
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-24 17:37:04 +01:00
54f2d35416
kernel: Add the fork() system call 2023-03-18 23:45:48 +01:00
a4ac3c85ed
kernel+libc: Copy argv to userspace
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-18 22:25:19 +01:00
0b00dc3fe4
kernel/exec: Rename item to string_addr
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-18 21:56:34 +01:00
7f50893786
kernel/exec: Copy argv from userspace
All checks were successful
continuous-integration/drone/push Build is passing
2023-03-18 21:55:16 +01:00
8c72e9a49a
kernel: Add an exec() system call
All checks were successful
continuous-integration/drone/push Build is passing
Doesn't support arguments or environment for now.
2023-03-16 22:44:58 +01:00
cf758fdfdc Initial commit :) 2022-11-13 10:09:09 +01:00
42efc21110 Start implementing read and write support in tmpfs
write seems to work fine, read just hangs there, waiting.
2022-11-12 20:11:26 +01:00
58fb422161 Kernel: Return a Result in MemoryManager and strdup_from_user 2022-11-12 11:56:40 +01:00
1ea216dfd1 Kernel: Rename assert.h to ensure.h
The macro is named "ensure", the header file should reflect that.
2022-11-09 15:28:35 +01:00
033c41cbd7 Kernel: Rework the uid/gid system to make it compliant 2022-11-09 09:54:07 +01:00
ffcaac0ca3 Kernel: Add validate_user_write() and validate_user_read()
Not at copy_from_user and copy_to_user yet, but an improvement over blindly using physical memory.
2022-11-04 22:46:48 +01:00
c604c074a1 Kernel: Rename ASSERT() to ensure()
Doesn't get stripped on release builds, so it shouldn't be named assert.
2022-11-02 19:38:15 +01:00
e5cf32c7b3 Kernel: Introduce page ownership
Some pages, such as framebuffer pages, are not physical memory frames reserved for the current process.
Some, such as the framebuffer, may be shared between all processes.
Yet, on exit() or on exec(), a process frees all frames mapped into its address spaces.
And on fork(), it copies all data between frames. So how could we map framebuffers.

Simple: we use one of the bits in page table entries which are available to the OS, and mark whether that page is owned by the current process.

If it is owned, it will be:
- Freed on address space destruction
- Its data will be copied to a new page owned by the child process on fork()

If it is not owned, it will be:
- Left alone on address space destruction
- On fork(), the child's virtual page will be mapped to the same physical frame as the parent

This still needs a bit more work, such as keeping a reference of how many processes use a page to free it when all processes using it exit/exec.
This should be done for MAP_SHARED mappings, for example, since they are not permanent forever,
unlike the framebuffer for example.
2022-11-02 19:32:28 +01:00
0115cce750 Kernel/VFS: Add file owners and file modes, and check those in system calls 2022-10-28 17:10:28 +02:00