Bananymous
41e1819072
Kernel: Align argv and envp to pointer boundary
...
This bug was found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous
fb7e9719a1
Kernel: Add fast fill method to framebuffer device
...
This makes `clear` much faster when running without kvm!
2025-07-02 00:17:42 +03:00
Bananymous
c2d09b64ca
Kernel: Drop 24 bpp support from double buffer
...
I don't even know why this was supported, I am not planning on making
the fb anything other than 32 bpp
2025-07-02 00:17:42 +03:00
Bananymous
1b2aa6c2da
Kernel: Fix unaligned access in AML
...
Found with ubsan
2025-07-02 00:17:42 +03:00
Bananymous
a5b4cee298
Kernel: Load USTAR from a boot module if loading root partition fails
...
This allows banan-os to boot on hardware where we don't have working
storage driver or the storage driver fails (pretty common with my usb
mass storage drivers...)
2025-07-02 00:17:42 +03:00
Bananymous
17f1ac10e3
Kernel: Don't ignore modules passed with multiboot2
2025-07-02 00:17:42 +03:00
Bananymous
c67198032f
Kernel: Rewrite TmpFS block and inode allocation
...
This makes creating files and appending to then A LOT faster. Some code
I tested took 40 seconds in the previous implementation and less than a
second on the new one!
This code is really sketcy, I hope I'll never have to touch it again :)
2025-07-02 00:17:42 +03:00
Bananymous
107b092982
Kernel: Allow arbitrary sized tmpfs files
...
The 2 block limit started to get annoying :D
2025-07-02 00:17:42 +03:00
Bananymous
bac06e45a4
Kernel: Fix TmpSymlinkInode target getting/setting
2025-07-02 00:17:42 +03:00
Bananymous
0e8a68831c
Kernel: Fix TmpInode chmod not preserving file type
2025-07-02 00:17:42 +03:00
Bananymous
5912abd541
Kernel: Add error reporting for readonly mounted filesystems
2025-07-02 00:17:42 +03:00
Bananymous
13d33995cb
Kernel: Make sure PageTable::fast_page gets passed page aligned addr
2025-06-30 01:48:47 +03:00
Bananymous
c8c05f62b4
Kernel: Remove unused FileSystem::dev
2025-06-29 00:29:03 +03:00
Bananymous
ebf2b16d09
Kernel: Implement chown to ext2 and tmpfs
2025-06-28 21:28:54 +03:00
Bananymous
7314cf708c
Kernel: Only restart certain syscalls with SA_RESTART
...
SA_RESTART is not supposted to restart every function.
2025-06-28 20:25:35 +03:00
Bananymous
db571b4859
Kernel: Allow relockign mutex even when holding a spinlock
...
Only reason mutex locking is now allowed with spinlocks is to prevent
yield.
Also try_lock can be now safely used while holding a spinlock
2025-06-28 19:40:54 +03:00
Bananymous
e8491b34b8
Kernel/LibC: Rework TIOC{G,S}WINSZ more linux like
...
Userspace can freely set terminal size, kernel just updates it when for
example new font is loaded. Also SIGWINCH is now sent by kernel instead
of userspace.
2025-06-28 19:40:54 +03:00
Bananymous
f73bb242f3
Kernel: Save fpu state and flags in signal handler
...
This was causing some weird crashes :D
2025-06-28 16:55:13 +03:00
Bananymous
9e895e5286
Kernel: Use fxsave64 and fxrstor64 on 64 bit target
2025-06-28 16:55:13 +03:00
Bananymous
5b0e5512a8
Kernel: Don't block in send until full message is sent
...
Only block until some data was sent. This allows select + send to be
actually non blocking if used correctly.
Also fixes a bug with non blocking sockets that could not send the full
message is one try.
2025-06-28 16:55:13 +03:00
Bananymous
05a727979a
Kernel: Make sse initialization thread safe
2025-06-28 16:55:13 +03:00
Bananymous
fe62ce4bae
Kernel: Fix spurious wakeup from SYS_SLEEP
2025-06-28 16:55:13 +03:00
Bananymous
4695fa061d
Kernel: Don't panic if UNIX socket is already bound but deleted
2025-06-28 16:55:13 +03:00
Bananymous
83c0ef3514
Kernel: Implement CLOCK_{PROCESS,THREAD}_CPUTIME_ID
2025-06-28 16:55:13 +03:00
Bananymous
93e5d09a63
Kernel/LibC: Implement flock
2025-06-28 16:55:13 +03:00
Bananymous
6d3d41abe2
Kernel: Fix possible division by zero in scheduler
2025-06-28 16:55:13 +03:00
Bananymous
3283359ac8
Kernel: Cleanup ANSI DSR
2025-06-19 19:05:49 +03:00
Bananymous
fff16f6b8c
Kernel: don't directly access user memory in mmap
2025-06-19 19:04:20 +03:00
Bananymous
a347ceba74
Kernel: Cleanup sys_wait sleep/signal handling
2025-06-19 19:03:42 +03:00
Bananymous
05836fab4c
Kernel: Allow accessing fd's inode without having read/search access
...
I have no idea what the point of this was. VFS is already verifying
read and search access
2025-06-19 19:02:28 +03:00
Bananymous
32c35a822b
BuildSystem: binutils1.39->1.44, gcc12.2.0->15.1.0
2025-06-19 19:00:50 +03:00
Bananymous
9c86e5e54d
Kernel: Add ANSI SGR 39 and 49
...
Also debug log unimplemented ANSI SRGs, this makes finding missing
commonly used ANSI SGR codes more easy
2025-06-18 20:34:55 +03:00
Bananymous
125f8b591d
Kernel: Don't crash if socket tries to reconnect
...
:D
2025-06-11 01:54:41 +03:00
Bananymous
e92f039a17
Kernel: Fix tcp sending with already sent unacknowledged bytes
2025-06-06 11:55:44 +03:00
Bananymous
ef76ffa1c1
Kernel: Remove unnecessary hack
...
This is no longer needed as thread unlocks its spinlock before calling
Process::exit() on terminating signal
2025-06-06 11:13:55 +03:00
Bananymous
652eb2346c
Kernel: Fix syscall interrupt disabling
...
If thread had a terminating signal, syscall leaving would try to lock
process's mutex while not having interrupts enabled
2025-06-06 11:12:48 +03:00
Bananymous
66726090ec
Kenrel: Fix TCP connection closing
...
If TCP socket was connected with connect() instead of accept() it would
never send FIN to other end when it was closed.
2025-06-06 11:10:29 +03:00
Bananymous
b668173cba
Kernel: Fix pseudo terminal writability
2025-06-06 11:09:50 +03:00
Bananymous
c6ded82406
Kernel: Fix a deadlock when thread is executing terminating signal
2025-06-06 06:52:27 +03:00
Bananymous
a76c6faffc
Kernel: Fix a deadlock when process is exiting
2025-06-06 06:52:02 +03:00
Bananymous
81ff71a97f
Kernel: Track the number of recursive spinlocks a thread is holding
2025-06-06 06:51:15 +03:00
Bananymous
56db0efe58
Kernel: Add missing file for race condition fixes :)
2025-06-06 04:03:37 +03:00
Bananymous
5eefd98e1b
Kernel: Add debugging macro to dump syscalls that take a long time
2025-06-06 04:00:57 +03:00
Bananymous
eecdad50a6
Kernel: Fix most of mutex + block race conditions
...
All block functions now take an optional mutex parameter that is
atomically unlocked instead of having the user unlock it before hand.
This prevents a ton of race conditions everywhere in the code!
2025-06-06 03:59:22 +03:00
Bananymous
96d5ed9cc7
Kernel: Fix E1000 driver interrupts
...
I have no idea why, but E1000 seems to be missing interrupts frequently
when clearing ICR only at the end of the interrupt handler
2025-06-06 03:45:35 +03:00
Bananymous
73090ecb37
Kernel: TTY set EPOLLOUT
2025-06-05 22:04:51 +03:00
Bananymous
8812704601
Kernel: Make sure IPv4 and ARP packets are not missed
...
This is a really hacky solution but will do until i get atomic
unblocking with respect to locks
2025-06-05 22:03:15 +03:00
Bananymous
0f189d410e
Kernel: Fix unix socket recv from
...
If connection on unix socket was closed and other end tries to recvfrom,
the thread would enter a fucked up state where it held the socket's
spinlock when returning to userspace.
2025-06-05 22:02:53 +03:00
Bananymous
cfeabc4580
Kernel/Terminal: Fix ANSI SGR 8 bit color parsing
2025-06-05 20:43:57 +03:00
Bananymous
f79db874bf
Kernel: Fix ANSI CSI 1J
...
I was accidentally clearing the whole screen when I needed to clear from
cursor to the end of the screen
2025-06-05 02:38:57 +03:00
Bananymous
8de19aff3c
Kernel/Terminal: Fix 24 bit ANSI SGR color parsing
2025-06-05 02:38:07 +03:00
Bananymous
bf41b448d6
Kernel: Fix TCP sending
...
- Fix race condition when adding packet to send buffer before other end
has acknowledged it
- Allow sending multiple packets before receiving ACK for previous ones
2025-06-04 22:21:35 +03:00
Bananymous
448632cf11
Kernel: Add fast path to pselect and ppoll
...
If events are available right away, don't create epoll object to wait
on. Also fix pselect return value to the number of bits set. Previously
return value could've been greater than that if epoll return EPOLLERR or
EPOLLHUP for events that were not listened to
2025-06-04 17:51:22 +03:00
Bananymous
943069b2a3
Kernel: Socket EPIPE and send SIGPIPE on write after hang up
2025-06-03 10:24:44 +03:00
Bananymous
e305698e6b
Kernel: Fix epoll EPOLLHUP and EPOLLERR reporting
2025-06-03 10:23:53 +03:00
Bananymous
4c0b7d44b4
Kernel: Enable ECHOE and ECHOK, support VKILL, fix VEOF
2025-06-02 16:26:53 +03:00
Bananymous
fb466b5af7
Kernel: use termios c_cc values instead of hardcoded characters
2025-06-02 15:54:11 +03:00
Bananymous
7a645b8555
Kernel: Add SMP message StackTrace
...
This event is sent when user presses ctrl+{F1-F12} and it will dump the
corresponding processor's stack trace. This is really helpful for
detecting deadlocks in the system
2025-06-02 11:39:18 +03:00
Bananymous
c5b0d0235f
Kenrel: Allow Processor::send_smp_message to send event to current CPU
2025-06-02 11:39:18 +03:00
Bananymous
e109b5cff6
Kernel: Remove unnecessary locks from Pipe
...
Inode already locks its own mutex when read/write is called there is no
need to explicitly lock them in read_impl/write_impl
2025-06-02 11:39:18 +03:00
Bananymous
9883fb7bf6
Kernel: Rewrite epoll notifying system
...
This removes the need to lock epoll's mutex when notifying epoll. This
prevents a ton of deadlocks when epoll is notified from an interrupt
handler or otherwise with interrupts disabled
2025-06-02 11:39:18 +03:00
Bananymous
b2e3aefa72
Kernel: Don't crash when terminating process with signal
2025-06-01 16:59:02 +03:00
Bananymous
31bcad2535
LibC: Implement truncate
2025-06-01 13:48:03 +03:00
Bananymous
b75970958e
Kernel/LibC: Implement unlinkat
2025-06-01 13:48:03 +03:00
Bananymous
91756c057e
LibC: Add all of the missing POSIX definitions in unistd.h and limits.h
2025-06-01 13:48:03 +03:00
Bananymous
dbdefa0f4a
LibC: Implement pthread cancelation
...
This code is not tested at all but it looks correct xD
2025-06-01 13:48:03 +03:00
Bananymous
56fdf6002c
Kernel/LibC: Implement pthread_kill
2025-06-01 13:48:03 +03:00
Bananymous
c957f1ddca
LibC: Cleanup pthread code and add some pthread_attr functions
...
errno, pthread cleanup and pthread id are now stored in uthread. This
allows using these without TLS
2025-06-01 13:48:03 +03:00
Bananymous
b1065fa01d
Kernel/LibC: Add ppoll syscall and fix poll
...
poll is now using its own syscall instead of wrapping aroung pselect.
This adds less overhead on top of poll and adds support for POLLHUP
2025-06-01 13:48:03 +03:00
Bananymous
8ff9c030bf
Kernel: Add better termios support
...
I'm not sure if this is correct but at least it's better than before :)
2025-06-01 13:48:03 +03:00
Bananymous
9b875fb930
Kernel: Make epoll work with different fds pointing to same inode
2025-06-01 13:48:03 +03:00
Bananymous
857bac4b78
Kernel: Disable unused interrupt methods in PCI devices
2025-06-01 13:48:03 +03:00
Bananymous
30074c290d
Kernel: Add more descriptive names to sockets types
2025-06-01 13:48:03 +03:00
Bananymous
60d1c26114
Kernel: Fix race condition in FileBackedRegion creation
2025-06-01 13:48:03 +03:00
Bananymous
692ba43182
Kernel: Fix spinlock bugs found by the new spinlock security
2025-06-01 13:48:03 +03:00
Bananymous
6542a037df
Kernel: Make spinlocks more safe
...
Kernel now makes sure thread is not holding any spinlocks when it tries
to lock a mutex or yield. Spinlocks are supposed to be only used for
short times without the possibility of yielding
2025-06-01 13:48:03 +03:00
Bananymous
9f4b451501
Kernel: Fix epoll deadlock
...
If epoll_wait and epoll_notify were called at the same time, there was a
possible deadlock when epoll was confirming the event from the inode
2025-06-01 13:48:03 +03:00
Bananymous
1bd454b8fd
Kernel/LibC: Implement utime* family functions
...
This patch adds *working*
- utime
- utimes
- utimensat
- futimens
2025-06-01 13:48:03 +03:00
Bananymous
cd5b351ce4
Kernel: Fix fchmodat mode handling
...
Ignore file type bits instead of returning EINVAL if they are set
2025-05-29 03:24:31 +03:00
Bananymous
4d4fb3b6ec
Kernel: Cleanup and fix pipe
...
pipe now sends SIGPIPE and returns EPIPE when writing and no readers are
open
2025-05-29 01:02:22 +03:00
Bananymous
89c9bfd052
Kernel/LibC: Implement `socketpair` for UNIX sockets
2025-05-28 03:10:01 +03:00
Bananymous
12b93567f7
Kernel/LibC: Implement `getpeername`
2025-05-28 03:10:01 +03:00
Bananymous
2f37776614
Kernel: Notify epoll on new TCP connections
2025-05-28 03:10:01 +03:00
Bananymous
f778bca3f2
Kernel: Remove accidentally commited debug code :)
2025-05-28 03:10:01 +03:00
Bananymous
a945d19750
Kernel: Partially fix PCI PIN interrupt routing
...
Don't fail early if the first device is not the one we are looking for
2025-05-28 03:10:01 +03:00
Bananymous
7f04b2c96c
Kernel: Fix E1000 interrupt handling
...
E1000 does not support MSI-X and thus does not generate RxQ0 interrupts.
2025-05-28 03:10:01 +03:00
Bananymous
79a2b84c81
Kernel: Fix process exit when there are multiple threads
2025-05-28 03:10:01 +03:00
Bananymous
44b762f916
Kernel/LibC: Implement pwrite and make pread non-locking
2025-05-28 03:10:01 +03:00
Bananymous
6be3b1d7f2
commit from banan-os :D
2025-05-27 23:57:43 +00:00
Bananymous
0e0d7016b3
Kernel: Rename has_hangup -> has_hungup
2025-05-17 12:39:23 +03:00
Bananymous
553c76ab0f
Kernel: Add locking to inode's epoll list
...
This was prone to crashing :)
2025-05-17 12:36:36 +03:00
Bananymous
d1bb72f6fb
Kernel: Don't allow CPU load printing underflow
2025-05-13 10:19:13 +03:00
Bananymous
1bcd1edbf5
Kernel/LibC: Implement basic epoll
...
This implementation is on top of inodes instead of fds as linux does it.
If I start finding ports/software that relies on epoll allowing
duplicate inodes, I will do what linux does.
I'm probably missing multiple epoll_notify's which may cause hangs but
the system seems to work fine :dd:
2025-05-13 10:18:05 +03:00
Bananymous
143a00626b
Kernel: Fix fork cmdline copying and copy environ
2025-05-13 10:16:21 +03:00
Bananymous
0eb981f51c
Kernel: Fix Random.h includes
2025-05-13 10:16:21 +03:00
Bananymous
6cc01349f7
Kernel: Fix unblocking recv through read
2025-05-13 10:16:21 +03:00
Bananymous
a7bd4acd46
Kernel: Remove static variables from virtual tty
2025-05-13 10:16:21 +03:00
Bananymous
8e0a56b49a
Kernel: Implement loopback network interface
2025-05-13 10:16:21 +03:00
Bananymous
96496da0ab
Kernel: Allow USB mouse to send extra2 button events
2025-05-05 22:32:26 +03:00
Bananymous
592675022e
Kernel: Allow tcgetpgrp on pseudo terminal masters
2025-05-05 19:09:01 +03:00