ladybird/Kernel
Andreas Kling 8b54ba0d61 Kernel: Dispatch pending signals when returning from a syscall
It was quite easy to put the system into a heavy churn state by doing
e.g "cat /dev/zero".

It was then basically impossible to kill the "cat" process, even with
"kill -9", since signals are only delivered in two conditions:

a) The target thread is blocked in the kernel
b) The target thread is running in userspace

However, since "cat /dev/zero" command spends most of its time actively
running in the kernel, not blocked, the signal dispatch code just kept
postponing actually handling the signal indefinitely.

To fix this, we now check before returning from a syscall if there are
any pending unmasked signals, and if so, we take a dramatic pause by
blocking the current thread, knowing it will immediately be unblocked
by signal dispatch anyway. :^)
2020-01-12 15:04:33 +01:00
..
ACPI Kernel: Create a basic SMBIOS Decoder 2020-01-02 00:50:09 +01:00
Arch/i386 Kernel: Rename {ss,esp}_if_crossRing to userspace_{ss,esp} 2020-01-09 18:02:01 +01:00
Devices Kernel: Add "video" pledge for accessing framebuffer devices 2020-01-12 02:18:30 +01:00
FileSystem Kernel: Put some VFS debug spam behind VFS_DEBUG 2020-01-12 10:01:22 +01:00
Heap Kernel: Demangle userspace ELF symbols in backtraces 2019-11-27 14:06:24 +01:00
Net IPv4: Require "inet" promise for ioctl() on an IPv4Socket 2020-01-12 13:28:07 +01:00
PCI Kernel: Fixing PCI MMIO access mechanism 2020-01-02 21:45:04 +01:00
TTY Kernel: Require "tty" for ioctl() on TTY and MasterPTY 2020-01-12 13:29:51 +01:00
VM Kernel: Copy Region's "is_mmap" flag when cloning regions for fork() 2020-01-10 19:24:01 +01:00
.bochsrc Meta: Make Serenity run on Bochs once again 2019-08-06 21:09:24 +02:00
.gitignore Meta: Removed all gitignore in the source tree only keeping the root one 2019-06-30 10:41:26 +02:00
Assertions.h Kernel: Move i386.{cpp,h} => Arch/i386/CPU.{cpp,h} 2019-06-07 20:02:01 +02:00
build-gpt-image-grub.sh Build: Fix more bugs in the POSIX sh-ification of scripts 2019-11-03 13:11:43 +01:00
build-image-grub.sh Build: Bump the default disk image size from 500MB to 600MB 2019-11-26 12:54:33 +01:00
build-image-qemu.sh Build: add support for building on OpenBSD 2020-01-02 21:03:53 +01:00
build-root-filesystem.sh Base: Let's make home directories 700 to keep things private :^) 2020-01-09 21:57:52 +01:00
CMOS.cpp AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
CMOS.h AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
Console.cpp Kernel: Make File's can_read/can_write take a const FileDescription& 2019-11-04 14:03:14 +01:00
Console.h Kernel: Make File's can_read/can_write take a const FileDescription& 2019-11-04 14:03:14 +01:00
DoubleBuffer.cpp Revert "Kernel: Make DoubleBuffer use a KBuffer instead of kmalloc()ing" 2019-10-18 15:58:06 +02:00
DoubleBuffer.h Revert "Kernel: Make DoubleBuffer use a KBuffer instead of kmalloc()ing" 2019-10-18 15:58:06 +02:00
FB.h Kernel: Add framebuffer ioctls; wrap raw ioctls with a C API 2019-08-18 07:40:02 +02:00
grub.cfg Kernel: Embrace the SerenityOS name 2019-12-29 19:08:02 +01:00
grub_gpt.cfg Kernel: Embrace the SerenityOS name 2019-12-29 19:08:02 +01:00
init.cpp Kernel: Add a basic chroot() syscall :^) 2020-01-10 23:14:04 +01:00
IO.h Kernel: First cut of a sb16 driver 2019-07-13 08:00:24 +02:00
IRQHandler.cpp Kernel: Move PIC.cpp into Arch/i386/ 2019-07-09 15:04:43 +02:00
IRQHandler.h AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
KBuffer.h Kernel: Make kernel memory regions be non-executable by default 2019-12-25 22:41:34 +01:00
KBufferBuilder.cpp Kernel: Make kernel memory regions be non-executable by default 2019-12-25 22:41:34 +01:00
KBufferBuilder.h AK: Rename <AK/AKString.h> to <AK/String.h> 2019-09-06 15:36:54 +02:00
KernelInfoPage.h Kernel+LibC: Publish a "kernel info page" and use it for gettimeofday() 2019-12-15 21:29:26 +01:00
KeyCode.h Kernel: Implement AltGr key support 2019-12-31 19:31:42 +01:00
KParams.cpp AK: Make HashMap::get(Key) return an Optional<Value>. 2019-07-24 10:25:43 +02:00
KParams.h AK: Rename <AK/AKString.h> to <AK/String.h> 2019-09-06 15:36:54 +02:00
kprintf.cpp Kernel: Demangle userspace ELF symbols in backtraces 2019-11-27 14:06:24 +01:00
KResult.h Kernel: Add KResult::error() to make it look symmetrical with KResultOr 2020-01-06 12:08:27 +01:00
kstdio.h Build: Get rid of the USERLAND define 2019-12-20 22:59:11 +01:00
KSyms.cpp Kernel: Start implementing x86 SMAP support 2020-01-05 18:14:51 +01:00
KSyms.h Kernel: Allow modules to link against anything in kernel.map :^) 2019-11-28 21:30:20 +01:00
linker.ld Kernel: Harden memory mapping of the kernel image 2020-01-06 13:55:39 +01:00
Lock.cpp Kernel: Use a dedicated thread state for wait-queued threads 2019-12-01 16:02:58 +01:00
Lock.h Kernel: Add Lock::is_locked() 2019-12-26 11:43:23 +01:00
makeall.sh Build: Add fast build mode that does not clean everything or run tests 2020-01-09 18:07:21 +01:00
Makefile Kernel: Build the kernel as a position-independent executable 2020-01-06 13:04:11 +01:00
mkmap.sh Kernel: Allow modules to link against anything in kernel.map :^) 2019-11-28 21:30:20 +01:00
Module.h Kernel: Implement basic module unloading :^) 2019-11-28 21:07:22 +01:00
MousePacket.h AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
Multiboot.h AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
Process.cpp Kernel: Clearing promises with pledge("") should fail 2020-01-12 12:16:17 +01:00
Process.h Kernel: Add "video" pledge for accessing framebuffer devices 2020-01-12 02:18:30 +01:00
ProcessTracer.cpp AK: Rename the common integer typedefs to make it obvious what they are. 2019-07-03 21:20:13 +02:00
ProcessTracer.h Kernel: Make File's can_read/can_write take a const FileDescription& 2019-11-04 14:03:14 +01:00
Profiling.cpp Kernel: Separate out the symbol offsets in profile output 2019-12-12 21:59:47 +01:00
Profiling.h Kernel: Separate out the symbol offsets in profile output 2019-12-12 21:59:47 +01:00
Random.cpp Kernel: Add a more expressive API for getting random bytes 2020-01-03 12:43:07 +01:00
Random.h Kernel: Add a more expressive API for getting random bytes 2020-01-03 12:43:07 +01:00
RTC.cpp Kernel: Fix BIOS date/time on hardware 2019-09-28 13:59:49 +02:00
RTC.h Add clang-format file 2019-05-28 17:31:20 +02:00
run Kernel: Fixing PCI MMIO access mechanism 2020-01-02 21:45:04 +01:00
Scheduler.cpp Kernel: Dispatch pending signals when returning from a syscall 2020-01-12 15:04:33 +01:00
Scheduler.h Kernel: Switch to eagerly restoring x86 FPU state on context switch 2020-01-01 16:54:21 +01:00
SharedBuffer.cpp Kernel: Rename vmo => vmobject everywhere 2019-12-19 19:15:27 +01:00
SharedBuffer.h Kernel+LibC: Make all SharedBuffers purgeable (default: non-volatile) 2019-12-09 20:06:47 +01:00
StdLib.cpp Kernel: Randomize the stack canary on startup 2020-01-06 13:05:40 +01:00
StdLib.h Kernel: Pass a parameter struct to mknod() 2020-01-11 10:27:37 +01:00
sync.sh Meta: Allow sync.sh to be run from any directory 2020-01-06 10:43:00 +01:00
Syscall.cpp Kernel: Dispatch pending signals when returning from a syscall 2020-01-12 15:04:33 +01:00
Syscall.h ping: Use pledge() 2020-01-11 20:48:43 +01:00
TestModule.cpp Kernel: Have modules export their name in a "module_name" string 2019-11-29 21:31:17 +01:00
Thread.cpp Kernel: Keep SMAP protection enabled in Thread::backtrace_impl() 2020-01-12 10:47:01 +01:00
Thread.h Kernel: Fix kernel null deref on process crash during join_thread() 2020-01-10 19:23:45 +01:00
TimerQueue.cpp Kernel: Add kernel-level timer queue (heavily based on @juliusf's work) 2019-12-27 02:15:45 +01:00
TimerQueue.h Kernel: Add kernel-level timer queue (heavily based on @juliusf's work) 2019-12-27 02:15:45 +01:00
UnixTypes.h Kernel: Add a mode flag to sys$purge and allow purging clean inodes 2019-12-29 13:16:53 +01:00
WaitQueue.cpp Kernel: Use IntrusiveList to make WaitQueue allocation-free :^) 2019-12-22 12:38:01 +01:00
WaitQueue.h Kernel: Use IntrusiveList to make WaitQueue allocation-free :^) 2019-12-22 12:38:01 +01:00