summaryrefslogtreecommitdiff
path: root/Kernel
AgeCommit message (Collapse)Author
2023-01-16Kernel: Fix uninitialized member variable in FATFS FilesystemBrian Gianforcaro
Reported-by: PVS Studio
2023-01-15Everywhere: Fully qualify IsLvalueReference in TRY() macrosAndrew Kaster
If USING_AK_GLOBALLY is not defined, the name IsLvalueReference might not be available in the global namespace. Follow the pattern established in LibTest to fully qualify AK types in macros to avoid this problem.
2023-01-14Meta: Fix copyright header in Kernel/Syscalls/jail.cpp fileLiav A
I wrote that file in 2022, not Andreas in 2018.
2023-01-13AK+Everywhere: Disallow returning a reference from a fallible expressionTimothy Flynn
This will silently make a copy. Rather than masking this behavior, let's explicitly disallow it.
2023-01-13AK: Add support for "debug only" formattersMacDue
These are formatters that can only be used with debug print functions, such as dbgln(). Currently this is limited to Formatter<ErrorOr<T>>. With this you can still debug log ErrorOr values (good for debugging), but trying to use them in any String::formatted() call will fail (which prevents .to_string() errors with the new failable strings being ignored). You make a formatter debug only by adding a constexpr method like: static constexpr bool is_debug_only() { return true; }
2023-01-13Kernel/Net: Get the correct interface type in SIOCGIFHWADDR ioctlArda Cinar
When calling ioctl on a socket with SIOCGIFHWADDR, return the correct physical interface type. This value was previously hardcoded to ARPHRD_ETHER (Ethernet), and now can also return ARPHRD_LOOPBACK for the loopback adapter.
2023-01-13Kernel: Remove outdated FIXME in the DeviceManagement codeLiav A
2023-01-13Kernel: Require "stdio" pledge promise when calling get_root_session_idLiav A
2023-01-12Kernel: AK: Fix ignored .to_string() errors in IPv4SocketMacDue
2023-01-10Kernel+LibCore: Make %sid path parsing not take agesAndreas Kling
Before this patch, Core::SessionManagement::parse_path_with_sid() would figure out the root session ID by sifting through /sys/kernel/processes. That file can take quite a while to generate (sometimes up to 40ms on my machine, which is a problem on its own!) and with no caching, many of our programs were effectively doing this multiple times on startup when unveiling something in /tmp/session/%sid/ While we should find ways to make generating /sys/kernel/processes fast again, this patch addresses the specific problem by introducing a new syscall: sys$get_root_session_id(). This extracts the root session ID by looking directly at the process table and takes <1ms instead of 40ms. This cuts WebContent process startup time by ~100ms on my machine. :^)
2023-01-09Kernel/FileSystem: Fix kernel panic during FS init or mount failureTaj Morton
Resolves issue where a panic would occur if the file system failed to initialize or mount, due to how the FileSystem was already added to VFS's list. The newly-created FileSystem destructor would fail as a result of the object still remaining in the IntrusiveList.
2023-01-08Kernel: Remove the NE2000 PCI network adapter driverLiav A
Nobody tests this network card as the person who added it, Jean-Baptiste Boric (known as boricj) is not an active contributor in the project now. After a discussion with him on the Discord server, we agreed it's for the best to remove the driver, as for two reasons: - The original author (boricj) agreed to do this, stating that he will not be able to test the driver anymore after his Athlon XP machine is no longer supported after the removal of the i686 port. - It was agreed that the NE2000 network card family is far from the ideal hardware we would want to support, similarly to the RTL8139 that got removed recently for almost the same reason.
2023-01-07Kernel/Graphics: Introduce a new mechanism to initialize a PCI deviceLiav A
Instead of using a clunky switch-case paradigm, we now have all drivers being declaring two methods for their adapter class - create and probe. These methods are linked in each PCIGraphicsDriverInitializer structure, in a new s_initializers static list of them. Then, when we probe for a PCI device, we use each probe method and if there's a match, then the corresponding create method is called. As a result of this change, it's much more easy to add more drivers and the initialization code is more readable.
2023-01-07Kernel/Graphics: Allocate 16 MiB framebuffer if failed allocating largerLiav A
We try our best to ensure a DisplayConnector initialization succeeds, and this makes the Intel driver to work again, because if we can't allocate a Region for the whole PCI BAR mapped region, then we will try to allocate a Region with 16 MiB window size, so it doesn't eat the entire Kernel-allocated virtual memory space.
2023-01-07Kernel: Make Device::after_inserting to return ErrorOr<void>Liav A
Instead of just returning nothing, let's return Error or nothing. This would help later on with error propagation in case of failure during this method. This also makes us more paranoid about failure in this method, so when initializing a DisplayConnector we safely tear down the internal members of the object. This applies the same for a StorageDevice object, but its after_inserting method is much smaller compared to the DisplayConnector overriden method.
2023-01-07Kernel: Remove the RTL8139 PCI network adapter driverLiav A
Nobody tests this network card, and the driver has bugs (see the issue https://github.com/SerenityOS/serenity/issues/10198 for more details), so it's almost certain that this happened due to code being rotting when there's simply no testing of it. Essentially this has been determined to be dead-code so this is the most important reason to drop this code. Another good reason to do so is because the RTL8139 only supports Fast Ethernet connections (10/100 Megabits per second), and is considered obsolete even for bare metal setups.
2023-01-07Kernel/Net: Introduce a new mechanism to initialize a PCI deviceLiav A
Instead of using a clunky if-statement paradigm, we now have all drivers being declaring two methods for their adapter class - create and probe. These methods are linked in each PCINetworkDriverInitializer structure, in a new s_initializers static list of them. Then, when we probe for a PCI device, we use each probe method and if there's a match, then the corresponding create method is called. After the adapter instance is created, we call the virtual initialize method on it, because many drivers actually require a sort of post-construction initialization sequence to ensure the network adapter can properly function. As a result of this change, it's much more easy to add more drivers and the initialization code is more readable and it's easier to understand when and where things could fail in the whole initialization sequence.
2023-01-07Kernel/Net: Allocate regions before invoking the RTL8139 constructorLiav A
Instead of allocating those regions in the constructor, which makes it impossible to fail in case of OOM condition, allocate them in the static factory method so we could propagate errors in case of failure.
2023-01-07Kernel/Net: Allocate regions before invoking Intel driver constructorsLiav A
Instead of allocating after the construction point ensure that all Intel drivers are allocating necessary buffer regions and then pass them to the constructors. This could let us fail early in case of OOM, so we don't touch a network adapter before we ensure we have all the appropriate mappings in place.
2023-01-07Kernel: Mark Process::jail() method as constLiav A
We really don't want callers of this function to accidentally change the jail, or even worse - remove the Process from an attached jail. To ensure this never happens, we can just declare this method as const so nobody can mutate it this way.
2023-01-06Kernel: Add helper function to check if a Process is in jailLiav A
Use this helper function in various places to replace the old code of acquiring the SpinlockProtected<RefPtr<Jail>> of a Process to do that validation.
2023-01-06Kernel: Restore setting i8042 scan code set to scan code set 2 sequenceLiav A
This seems to work perfectly OK on my ICH7 test machine and also it works on QEMU, so it is probably OK to restore this. This will ensure we always get scan code set 1 input, because we enable scan code set 2 and PS/2 translation on the first (keyboard) port.
2023-01-06Kernel: Make i8042 controller initialization sequence more robustLiav A
The setting of scan code set sequence is removed, as it's buggy and could lead the controller to fail immediately when doing self-test afterwards. We will restore it when we understand how to do so safely. Allow the user to determine a preferred detection path with a new kernel command line argument. The defualt option is to check i8042 presence with an ACPI check and if necessary - an "aggressive" test to determine i8042 existence in the system. Also, keep the i8042 controller pointer on the stack, so don't assign m_i8042_controller member pointer if it does not exist.
2023-01-05Kernel/SysFS: Don't refresh/set-values inside the Jail spinlock scopeLiav A
Only do so after a brief check if we are in a Jail or not. This fixes SMP, because apparently it is crashing when calling try_generate() from the SysFSGlobalInformation::refresh_data method, so the fix for this is to simply not do that inside the Process' Jail spinlock scope, because otherwise we will simply have a possible flow of taking multiple conflicting Spinlocks (in the wrong order multiple times), for the SysFSOverallProcesses generation code: Process::current().jail(), and then Process::for_each_in_same_jail being called, we take Process::all_instances(), and Process::current().jail() again. Therefore, we should at the very least eliminate the first taking of the Process::current().jail() spinlock, in the refresh_data method of the SysFSGlobalInformation class.
2023-01-05Kernel: Repair build for aarch64Ben Wiederhake
This broke in 6fd478b6ce6e717132a5e9a9a907d0e56916701f due to insufficient testing on my part. Sorry!
2023-01-05Kernel/aarch64: Remove counterproductive `volatile`Nico Weber
Should not be needed, and triggers -Wvolatile in gcc. See discussion on #16790.
2023-01-05Kernel: Convert 2 instances of `dbgln` to `dmesgln_pci` in AC'97Jelle Raaijmakers
2023-01-05Kernel: Add dmesgln_pci logging for Kernel::PCIEvan Smal
A virtual method named device_name() was added to Kernel::PCI to support logging the PCI::Device name and address using dmesgln_pci. Previously, PCI::Device did not store the device name. All devices inheriting from PCI::Device now use dmesgln_pci where they previously used dmesgln.
2023-01-04Everywhere: Make global `inline` functions not `static`Nico Weber
`inline` already assigns vague linkage, so there's no need to also assign per-TU linkage. Allows the linker to dedup these functions across TUs (and is almost always just the Right Thing to do in C++ -- this ain't C).
2023-01-04Everywhere: Remove some redundant `inline` keywordsNico Weber
Functions defined inside class bodies (including static functions) are implicitly inline, no need to type it out.
2023-01-04Kernel/FileSystem: Fix handling of FAT names that don't fill an entryTaj Morton
* Fix bug where last character of a filename or extension would be truncated (HELLO.TXT -> HELL.TX). * Fix bug where additional NULL characters would be added to long filenames that did not completely fill one of the Long Filename Entry character fields.
2023-01-04Kernel/FileSystem: Remove FIXME about old/new path being the sameTaj Morton
Added comment after confirming that Linux and OpenBSD implenment the same behavior.
2023-01-03Kernel: Allow sending `SIGCONT` to processes in the same groupyyny
Allow sending `SIGCONT` to processes that share the same `pgid`. This is allowed in Linux aswell. Also fixes a FIXME :^)
2023-01-03Kernel: Add `sid` and `pgid` to `Credentials`yyny
There are places in the kernel that would like to have access to `pgid` credentials in certain circumstances. I haven't found any use cases for `sid` yet, but `sid` and `pgid` are both changed with `sys$setpgid`, so it seemed sensical to add it. In Linux, `man 7 credentials` also mentions both the session id and process group id, so this isn't unprecedented.
2023-01-02Everywhere: Remove unused includes of AK/Memory.hBen Wiederhake
These instances were detected by searching for files that include AK/Memory.h, but don't match the regex: \\b(fast_u32_copy|fast_u32_fill|secure_zero|timing_safe_compare)\\b This regex is pessimistic, so there might be more files that don't actually use any memory function. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Everywhere: Remove unused includes of AK/Concepts.hBen Wiederhake
These instances were detected by searching for files that include AK/Concepts.h, but don't match the regex: \\b(AnyString|Arithmetic|ArrayLike|DerivedFrom|Enum|FallibleFunction|Flo atingPoint|Fundamental|HashCompatible|Indexable|Integral|IterableContain er|IteratorFunction|IteratorPairWith|OneOf|OneOfIgnoringCV|SameAs|Signed |SpecializationOf|Unsigned|VoidFunction)\\b (Without the linebreaks.) This regex is pessimistic, so there might be more files that don't actually use any concepts. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Everywhere: Remove unused includes of AK/StdLibExtras.hBen Wiederhake
These instances were detected by searching for files that include AK/StdLibExtras.h, but don't match the regex: \\b(abs|AK_REPLACED_STD_NAMESPACE|array_size|ceil_div|clamp|exchange|for ward|is_constant_evaluated|is_power_of_two|max|min|mix|move|_RawPtr|RawP tr|round_up_to_power_of_two|swap|to_underlying)\\b (Without the linebreaks.) This regex is pessimistic, so there might be more files that don't actually use any "extra stdlib" functions. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Everywhere: Remove unused includes of AK/Format.hBen Wiederhake
These instances were detected by searching for files that include AK/Format.h, but don't match the regex: \\b(CheckedFormatString|critical_dmesgln|dbgln|dbgln_if|dmesgln|FormatBu ilder|__FormatIfSupported|FormatIfSupported|FormatParser|FormatString|Fo rmattable|Formatter|__format_value|HasFormatter|max_format_arguments|out |outln|set_debug_enabled|StandardFormatter|TypeErasedFormatParams|TypeEr asedParameter|VariadicFormatParams|v_critical_dmesgln|vdbgln|vdmesgln|vf ormat|vout|warn|warnln|warnln_if)\\b (Without the linebreaks.) This regex is pessimistic, so there might be more files that don't actually use any formatting functions. Observe that this revealed that Userland/Libraries/LibC/signal.cpp is missing an include. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Kernel: Remove unused includes of Kernel/Debug.hBen Wiederhake
These instances were detected by searching for files that include Kernel/Debug.h, but don't match the regex: \\bdbgln_if\(|_DEBUG\\b This regex is pessimistic, so there might be more files that don't check for any real *_DEBUG macro. There seem to be no corner cases anyway. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Kernel: Turn lock ranks into template parameterskleines Filmröllchen
This step would ideally not have been necessary (increases amount of refactoring and templates necessary, which in turn increases build times), but it gives us a couple of nice properties: - SpinlockProtected inside Singleton (a very common combination) can now obtain any lock rank just via the template parameter. It was not previously possible to do this with SingletonInstanceCreator magic. - SpinlockProtected's lock rank is now mandatory; this is the majority of cases and allows us to see where we're still missing proper ranks. - The type already informs us what lock rank a lock has, which aids code readability and (possibly, if gdb cooperates) lock mismatch debugging. - The rank of a lock can no longer be dynamic, which is not something we wanted in the first place (or made use of). Locks randomly changing their rank sounds like a disaster waiting to happen. - In some places, we might be able to statically check that locks are taken in the right order (with the right lock rank checking implementation) as rank information is fully statically known. This refactoring even more exposes the fact that Mutex has no lock rank capabilites, which is not fixed here.
2023-01-02AK+Kernel: Eliminate UB (signed overflow) from days_since_epochBen Wiederhake
2023-01-02AK: Combine SinglyLinkedList and SinglyLinkedListWithCountLenny Maiorani
Using policy based design `SinglyLinkedList` and `SinglyLinkedListWithCount` can be combined into one class which takes a policy to determine how to keep track of the size of the list. The default policy is to use list iteration to count the items in the list each time. The `WithCount` form is a different policy which tracks the size, but comes with the overhead of storing the count and incrementing/decrementing on each modification. This model is extensible to have other forms of counting by implementing only a new policy instead of implementing a totally new type.
2023-01-02Everywhere: Remove unused includes of AK/Array.hBen Wiederhake
These instances were detected by searching for files that include Array.h, but don't match the regex: \\b(Array(?!\.h>)|iota_array|integer_sequence_generate_array)\\b These are the three symbols defined by Array.h. In theory, one might use LibCPP to detect things like this automatically, but let's do this one step after another.
2023-01-02Kernel: Remove unused includesBen Wiederhake
2023-01-02Kernel: Propagate properly errors from PCI IDE Controller initializationLiav A
2023-01-02Kernel: Remove stale detect_disks method from PCI IDE controller classLiav A
2023-01-01Kernel/x86_64: *Restore* interrupt flag in page fault handlerAndreas Kling
If a page fault occurs while interrupts are disabled, we were wrongly enabling interrupts right away in the page fault handler. Instead, we should only do this if interrupts were enabled when the page fault occurred.
2023-01-01Kernel+Tests: Allow deleting someone else's file in my sticky directoryAndreas Kling
This should be allowed according to Dr. POSIX. :^)
2023-01-01Kernel: Annotate VirtualFileSystem::rmdir() errors with spec commentsAndreas Kling
2023-01-01Kernel+Tests: Remove inaccurate FIXME in sys$rmdir()Andreas Kling
We were already handling the rmdir("..") case by refusing to remove directories that were not empty. This patch removes a FIXME from January 2019 and adds a test. :^)