Commit graph

4054 commits

Author SHA1 Message Date
Andreas Kling
612a5225fa Kernel: Convert klog() => AK::Format in StdLib 2021-03-12 12:28:27 +01:00
Andreas Kling
a8fcdb8314 Kernel: Convert klog() => AK::Format in APIC 2021-03-12 12:24:08 +01:00
Andreas Kling
6bfba0f576 Kernel: Convert klog() => AK::Format in IDEChannel 2021-03-12 12:16:06 +01:00
Andreas Kling
8b0ebe3e30 Kernel: Convert klog() => AK::Format in DiskPartition 2021-03-12 12:12:00 +01:00
Andreas Kling
f9aace29ec Kernel: Convert klog() => AK::Format in NetworkTask 2021-03-12 11:59:41 +01:00
Andreas Kling
201d35e70f Kernel: Convert klog() => dbgln() in BXVGADevice 2021-03-12 11:40:41 +01:00
Andreas Kling
3985468e83 Kernel: Convert klog() => AK::Format in PurgeablePageRanges 2021-03-12 11:38:43 +01:00
Andreas Kling
72cccfddbf Kernel: Convert klog() => AK::Format in APICTimer 2021-03-12 11:30:33 +01:00
Andreas Kling
bc925f57bb Kernel: Convert klog() => AK::Format in ACPI::Parser 2021-03-12 11:27:59 +01:00
Andreas Kling
b8ad3d7ccf Kernel: Convert klog() => AK::Format in RTL8139NetworkAdapter 2021-03-12 11:21:34 +01:00
Andreas Kling
6a3224d040 Kernel: Remove debug spam in DevFS 2021-03-12 11:12:50 +01:00
Andreas Kling
38f11cc1ba Everywhere: Rename "logo" key to "super" key
This seems to be the most common way to refer to this key, so let's
call it what people actually call it.
2021-03-11 18:55:16 +01:00
Andreas Kling
b1e0e2ad4a Kernel: Suppress logging during kmalloc heap expansion
The system is extremely sensitive to heap allocations during heap
expansion. This was causing frequent OOM panics under various loads.

Work around the issue for now by putting the logging behind
KMALLOC_DEBUG. Ideally dmesgln() & friends would not reqiure any
heap allocations, but we're not there right now.

Fixes #5724.
2021-03-11 15:28:42 +01:00
Andreas Kling
9853a9bc8a Kernel: Always protect process data immediately after construction 2021-03-11 14:46:48 +01:00
Andreas Kling
49a0f40ff0 Kernel: Inherit the dumpable flag on sys$fork()
This regressed at some point recently. All children were non-dumpable
until manually opting into it.
2021-03-11 14:35:37 +01:00
Andreas Kling
1608ef37d8 Kernel: Move process termination status/signal into protected data 2021-03-11 14:24:08 +01:00
Andreas Kling
4916b5c130 Kernel: Move process thread lists into protected data 2021-03-11 14:21:49 +01:00
Andreas Kling
b7b7a48c66 Kernel: Move process signal trampoline address into protected data 2021-03-11 14:21:49 +01:00
Andreas Kling
08e0e2eb41 Kernel: Move process umask into protected data :^) 2021-03-11 14:21:49 +01:00
Andreas Kling
90c0f9664e Kernel: Don't keep protected Process data in a separate allocation
The previous architecture had a huge flaw: the pointer to the protected
data was itself unprotected, allowing you to overwrite it at any time.

This patch reorganizes the protected data so it's part of the Process
class itself. (Actually, it's a new ProcessBase helper class.)

We use the first 4 KB of Process objects themselves as the new storage
location for protected data. Then we make Process objects page-aligned
using MAKE_ALIGNED_ALLOCATED.

This allows us to easily turn on/off write-protection for everything in
the ProcessBase portion of Process. :^)

Thanks to @bugaevc for pointing out the flaw! This is still not perfect
but it's an improvement.
2021-03-11 14:21:49 +01:00
Andreas Kling
4fcc637e29 Kernel: Add MAKE_ALIGNED_ALLOCATED helper macro
This macro inserts operator new/delete into a class, allowing you
to very easily specify a specific heap alignment.
2021-03-11 14:21:49 +01:00
Andreas Kling
96fb3d4a11 Kernel: Add MemoryManager::set_page_writable_direct()
This helper function goes directly to the page tables and makes a
virtual address writable or non-writable.
2021-03-11 14:21:49 +01:00
Andreas Kling
40f2abf7c3 Kernel: Allow kmalloc_aligned() alignment up to 4096
This allows us to get kmalloc() memory aligned to the VM page size.
2021-03-11 14:21:49 +01:00
Andreas Kling
a7b6282086 Kernel: Silence debug spam about chown and symlink during boot 2021-03-11 14:21:49 +01:00
Andreas Kling
de6c5128fd Kernel: Move process pledge promises into protected data 2021-03-10 22:50:00 +01:00
Andreas Kling
37ad880660 Kernel: Move process "dumpable" flag into protected data 2021-03-10 22:42:07 +01:00
Andreas Kling
3d27269f13 Kernel: Move process parent PID into protected data :^) 2021-03-10 22:30:02 +01:00
Andreas Kling
d677a73b0e Kernel: Move process extra_gids into protected data :^) 2021-03-10 22:30:02 +01:00
Andreas Kling
cbcf891040 Kernel: Move select Process members into protected memory
Process member variable like m_euid are very valuable targets for
kernel exploits and until now they have been writable at all times.

This patch moves m_euid along with a whole bunch of other members
into a new Process::ProtectedData struct. This struct is remapped
as read-only memory whenever we don't need to write to it.

This means that a kernel write primitive is no longer enough to
overwrite a process's effective UID, you must first unprotect the
protected data where the UID is stored. :^)
2021-03-10 22:30:02 +01:00
Andreas Kling
839d2d70a4 Kernel: Add non-const KBuffer::impl() getter 2021-03-10 22:30:02 +01:00
Andreas Kling
9b5c9efd73 Kernel: Build with -Wvla
Now that all use of VLA's (variable-length arrays) has been purged from
the kernel, let's make sure we don't reintroduce them.
2021-03-10 16:33:55 +01:00
Andreas Kling
e58a600d52 Kernel: Remove VLA usage in Ext2FS block traversal code
This was using up to 12KB of kernel stack in the triply indirect case
and looks generally spooky. Let's just allocate a ByteBuffer for now
and take the performance hit (of heap allocation). Longer term we can
reorganize the code to reduce the majority of the heap churn.
2021-03-10 16:33:47 +01:00
Andreas Kling
3dbb9c8448 Kernel: Turn a VLA into a statically-sized array in dump_backtrace() 2021-03-10 16:23:11 +01:00
Andreas Kling
54f6436598 Kernel: Convert klog() => dmesgln() in TCPSocket 2021-03-09 23:06:47 +01:00
Andreas Kling
b007bc07b7 Kernel: Convert klog() => dmesgln() in MemoryManager 2021-03-09 22:44:04 +01:00
Andreas Kling
232738fb7a Kernel: Use dbgln_if() and PANIC() in Thread.cpp 2021-03-09 22:35:51 +01:00
Andreas Kling
c67d550df1 Kernel: Convert klog() => dmesgln() in IPv4Socket 2021-03-09 22:25:09 +01:00
Andreas Kling
b12734cf13 Kernel: Convert klog() => dmesgln() in PageDirectory 2021-03-09 22:10:41 +01:00
Andreas Kling
65131334e7 Kernel: Convert klog() => dmesgln() in E1000NetworkAdapter 2021-03-09 22:10:41 +01:00
Andreas Kling
c8a8923842 Kernel: Convert klog() => dmesgln() in init() 2021-03-09 22:10:41 +01:00
Andreas Kling
ac1c01cc30 Kernel: Convert klog() => dmesgln() in ARP/routing code 2021-03-09 22:10:41 +01:00
Andreas Kling
aef6474ea7 Kernel: Convert klog() to dmesgln() in Region 2021-03-09 22:10:41 +01:00
Andreas Kling
07564577c0 Kernel: Convert klog() => dmesgln() in AnonymousVMObject 2021-03-09 22:10:41 +01:00
Andreas Kling
db0bca4153 Kernel: Convert klog() => dmesgln() in HPET 2021-03-09 22:10:41 +01:00
Andreas Kling
ed8d68d8fe Kernel: Convert klog() => dmesgln() in KernelRng 2021-03-09 22:10:41 +01:00
Andreas Kling
a906670d1c Kernel: Convert klog() => dmesgln() in VMWareBackdoor 2021-03-09 22:10:41 +01:00
Andreas Kling
5fd3006db2 Kernel: Convert klog() => dmesgln() in PS2MouseDevice 2021-03-09 22:10:41 +01:00
Andreas Kling
52ef08081c Kernel: Remove some unused things in kmalloc.cpp 2021-03-09 22:10:41 +01:00
Andreas Kling
cb4fcaa4b5 Kernel: Convert klog() => dmesgln() in kmalloc 2021-03-09 22:10:41 +01:00
Andreas Kling
10f10abaa3 Kernel: Convert klog() => dmesgln() in filesystem code 2021-03-09 22:10:41 +01:00