Fact-checked by Grok 2 weeks ago

Loadable kernel module

A loadable kernel module (LKM) is an containing code that extends the functionality of the of an operating at runtime by being dynamically loaded into or unloaded from upon demand, without requiring a or recompilation. The term is most commonly associated with , where LKMs form a core component of the 's modular architecture, enabling the addition of features such as drivers, filesystem support, and protocols only when needed, which optimizes usage and flexibility. This design contrasts with built-in components, which are statically compiled into the image and cannot be removed without rebuilding the entire . Common examples include hardware drivers for peripherals like graphics cards or USB , which can be loaded via user-space tools. Analogous dynamic loading mechanisms exist in other operating systems such as and , as covered in later sections. In , LKMs run in kernel space with full privileges, and modern (as of version 3.7) include module signing to mitigate security risks from malicious code.

Overview

Definition and Purpose

A loadable kernel module (LKM) is an containing code that can be dynamically loaded into an operating 's kernel to extend its functionality at runtime, without requiring a . These modules execute in kernel space, providing them with privileged access to and resources equivalent to the base . In contrast to statically linked kernels, where all components are compiled into a single during the build process, LKMs enable modular extensions that integrate seamlessly upon loading. The primary purpose of LKMs is to support the addition of specialized components, such as device drivers, file systems, or network protocols, on an as-needed basis, thereby enhancing flexibility and reducing the core 's size. This dynamic approach allows operating systems to adapt to new hardware or software requirements efficiently, avoiding the downtime associated with recompiling and restarting the entire . By loading only relevant code into memory, LKMs promote resource efficiency while maintaining the performance of a architecture. Key characteristics of LKMs include their form as relocatable objects, which are loaded via interfaces or user-space tools and must match the running version for . Upon insertion, modules register callbacks or hooks with the to handle events, ensuring proper initialization and . For example, a USB driver module might be loaded automatically when a peripheral is detected, enabling immediate device support, or a module could be invoked to volumes using formats like ext4.

Historical Development

Loadable kernel modules (LKMs) originated in the late amid efforts to enhance the modularity of Unix s, particularly in commercial variants seeking to support diverse without static compilation of all extensions. The concept emerged as a response to the limitations of monolithic s, allowing extensions like s to be loaded dynamically. A pioneering implementation appeared in 4.1, released by in 1990, which introduced support for loadable drivers across all supported architectures, enabling developers to attach modules to a running without rebuilding the kernel or rebooting. This feature was detailed in Sun's official documentation, marking a shift toward greater flexibility in environments. In the early , BSD variants adopted similar mechanisms, influenced by the modular design principles of earlier Unix research but adapted for practical performance in monolithic . introduced loadable kernel module code in version 0.9, released on August 23, 1993, as part of significant enhancements to kernel configurability and filesystem support. , drawing from the same BSD lineage, formalized its kernel loadable module (kld) facility in version 3.0, released on October 16, 1998, building on the LKM framework to enable runtime extensions for drivers and protocols. Meanwhile, the added LKM support in early 1995 with version 1.1.85, a development led by that allowed modular components like filesystems and network protocols to be integrated without core kernel modifications. These milestones reflected broader influences from architectures, prioritizing efficiency by keeping essential code in the base while offloading optional features. The drive for evolution stemmed from the explosive growth of personal computing hardware in the PC era, where frequent upgrades demanded adaptable operating systems, coupled with the burgeoning open-source movement that encouraged collaborative development. However, the saw controversies over LKM stability, as poorly written modules could destabilize the entire system, prompting refinements to loading interfaces and error handling in subsequent releases. By the early , LKMs had solidified as a standard feature across systems, integral to distributions like 2.6 and various BSDs. In the post-2010 era, focus intensified on security, driven by threats that exploited LKM loading to hide malicious code—early examples like the Knark rootkit in the late highlighted these risks—leading to measures such as mandatory module signing introduced in the 3.7 in 2012.

Benefits and Limitations

Advantages

Loadable kernel modules enhance the of operating systems by permitting the addition of kernel functionality, such as drivers or file systems, without requiring a complete rebuild or recompilation. This approach allows developers and distributors to provide a compact core kernel image separately from optional extensions, facilitating easier customization and deployment across diverse hardware configurations. By supporting on-demand loading at runtime, these modules reduce the initial of the , as only necessary components are incorporated into active memory. For instance, a module can remain unloaded until a task arises, thereby conserving for other system operations and improving overall resource efficiency. The hot-swappable nature of loadable kernel modules enables seamless updates for hardware additions, bug fixes, or feature enhancements without necessitating system downtime or reboots, which is particularly beneficial for plug-and-play support in and environments. This dynamic capability streamlines maintenance and adaptability in production settings. From a , loadable kernel modules accelerate iteration cycles for components like drivers and file systems by allowing isolated testing and outside the full build , which minimizes errors and shortens development time. In open-source ecosystems, this promotes the sharing and reuse of modules, fostering collaborative contributions and rapid innovation. Within designs, loadable modules deliver extensibility comparable to s—such as modular service addition—while avoiding the overhead that can degrade performance in microkernel architectures, thus maintaining high efficiency in execution speed.

Disadvantages

Loadable kernel modules (LKMs) operate within the 's , lacking the provided to user-space processes, which exposes the entire to risks from faulty code. A in an LKM, such as a dereference or invalid memory access, can trigger a and crash the , as modules execute with full privileges without containment mechanisms. This shared execution environment amplifies the impact of even minor errors compared to statically compiled components. Debugging LKMs presents significant challenges due to their with the 's , where standard user-space tools like gdb are ineffective without specialized adaptations. Issues in loaded modules are difficult to trace because kernel code runs asynchronously and independently of user processes, often requiring kernel debuggers like kgdb or , which demand or virtualized environments for safe reproduction. Unlike static kernel code, dynamically loaded modules complicate error isolation, as faults may manifest only under specific loads or timings, and excessive logging can overwhelm system resources without providing clear insights. While LKMs offer flexibility, they introduce a slight overhead from dynamic linking and unlinking operations, including in module initialization and minor usage for resolution during loading. This overhead, though typically negligible for most workloads, contrasts with the zero-cost integration of built-in code and expands the for by allowing runtime . Additionally, LKMs often depend on specific versions and application binary interfaces (ABIs), which lack stability guarantees; updates can alter internal structures, causing module loading failures or breakage without recompilation. Resource management in LKMs can lead to persistent issues, particularly memory leaks, if unloading is incomplete due to unresolved references or races during removal. Failed unloads prevent module cleanup, accumulating allocated resources in long-running systems and potentially exhausting kernel over time. Proper and are essential but error-prone, exacerbating reliability concerns in extended deployments.

Implementations Across Operating Systems

Linux

In the Linux kernel, loadable kernel modules are compiled into object files with the .ko extension using the Kbuild build system, which integrates with the kernel's Makefile infrastructure to produce relocatable binaries from C source code. These modules are dynamically loaded into the running kernel using commands such as insmod, which inserts a module directly from its file path, or modprobe, which resolves dependencies and handles configuration more intelligently. Key features of Linux kernel modules include support for runtime parameters, which allow users to configure module behavior via the kernel command line or sysfs interface after loading, using macros like module_param() to expose options such as integers, strings, or booleans. Modules also incorporate versioning through symbol CRC checks enabled by the CONFIG_MODVERSIONS configuration option, ensuring ABI compatibility by generating checksums for exported symbols in Module.symvers during the kernel build. Additionally, automatic dependency resolution is provided by tools from the module-init-tools package (now integrated into kmod), where depmod generates dependency maps in modules.dep.bin that modprobe uses to load prerequisite modules sequentially. License considerations play a central role in Linux module compatibility, as the kernel itself is licensed under the GNU General Public License version 2 (GPL-2.0-only), requiring modules to declare their license via the MODULE_LICENSE() macro to access core kernel symbols. Non-GPL modules, often proprietary, were historically tolerated if they avoided deriving from kernel code but faced limitations in accessing GPL-only exports; this stance evolved in the early 2000s with stricter enforcement, such as restricting security module hooks to GPL-licensed code in 2002, reflecting the community's emphasis on open-source purity. A notable controversy arose in 2004 involving Linuxant, a vendor of proprietary audio drivers, which was found to have falsely declared its modules as GPL-licensed using the MODULE_LICENSE("GPL") macro to gain unauthorized access to GPL-only kernel symbols and data structures, prompting kernel developers to highlight the practice as a violation and reinforcing tainting mechanisms for non-compliant modules. The Linux kernel ecosystem features a vast repository of modules integrated directly into the source tree, spanning directories like drivers/net and drivers/usb with thousands of open-source implementations for hardware and functionality. Adaptations for Android leverage this by basing the kernel on long-term support (LTS) versions with Generic Kernel Image (GKI) policies, where loadable modules are separated into Google-provided GKI modules for core features and vendor-specific modules for mobile hardware like SoCs, ensuring compatibility via the Kernel Module Interface (KMI).

FreeBSD

In FreeBSD, loadable kernel modules are managed through the Kernel Linker Daemon (kld) framework, which enables and unloading of extensions without requiring a . This was introduced in FreeBSD 2.0 in 1995, incorporating NetBSD's port of Terry Lambert's loadable kernel module support, with contributions from David Greenman for core implementation, Garrett Wollman for loadable filesystems, and Søren Schmidt for loadable execution classes. Modules are compiled as object files with the .ko extension, typically built alongside the using configuration files in /usr/src/sys and the make(1) utility, and stored in /boot/. They are loaded using the kldload(8) utility and unloaded with kldunload(8), both part of the kld(4) interface, which supports a.out(5) or formats and requires a level below 1 for operation. The framework emphasizes modularity for device drivers and file systems, allowing hardware support and additional kernel functionality to be added on demand. For instance, network interface drivers like ath(4) or input devices like psm(4) can be loaded dynamically, with automatic creation and destruction of device nodes in /dev via integration with devfs(5). This devfs coupling enables userland tools like devd(8) to respond to device events, facilitating seamless hardware detection and configuration. Modules can also be preloaded at boot by adding entries such as "if_ath_load=YES" to /boot/loader.conf, ensuring essential components are available without manual intervention. FreeBSD's development model treats modules as kernel extensions leveraging machine-independent (MI) code layers, which abstract hardware-specific details to promote portability across architectures like x86, , and PowerPC. This MI/MD (machine-dependent) split simplifies porting drivers and reduces architecture-specific recompilations, contrasting with more monolithic approaches by keeping modules lightweight and minimizing interdependencies. A distinctive feature is the framework, which monitors lock acquisitions and releases within modules to detect potential deadlocks through order violation checks, potentially triggering kernel panics or debugger entry for diagnostics. These modules find practical application in embedded variants of , such as , where the includes FreeBSD drivers for and hardware offload features like the Chelsio via t4_tom.ko. Maintenance occurs through the FreeBSD ports collection, where third-party or additional kernel modules are packaged as ports using the USES=kmod directive, allowing volunteers to submit and update them via standard porting processes without special privileges. This approach avoids the complex dependency chains seen in other systems, enabling straightforward updates and builds from source.

macOS

In macOS, loadable kernel modules are known as kernel extensions (KEXTs), introduced with in 2001 as part of the kernel, which derives from BSD and incorporates the hybrid kernel architecture. These extensions enable dynamic loading of code into the kernel to support hardware and system services, leveraging the IOKit framework for object-oriented driver development that matches hardware via personality matching in the IOKit registry. KEXTs are structured as bundle directories with a .kext extension, containing a compiled Mach-O executable binary and an Info.plist file that specifies metadata such as the extension's bundle identifier, version, and IOKit personality definitions. Developers build KEXTs using Xcode, incorporating C++ code compatible with the kernel environment, and the bundles can include resources like localized strings or additional libraries. Loading occurs manually via the kextload command-line utility, which validates and injects the extension into the running kernel, or automatically through launchd by configuring plist files in /Library/LaunchDaemons to execute kextload at boot or on demand. A significant evolution began with macOS 10.15 (Catalina) in 2019, when Apple introduced the DriverKit framework alongside System Extensions, allowing many driver functionalities to migrate to user space for improved stability and isolation from crashes. This shift deprecated traditional KEXTs, with macOS 11 () in 2020 introducing restrictions where the does not load KEXTs using deprecated kernel programming interfaces (KPIs) by default, requiring a transition to DriverKit for functionalities relying on unsupported APIs like those for HID or USB. As a result, new KEXT development is limited to legacy or specialized cases, with Apple encouraging all third-party extensions to adopt the System Extension model. Unique to macOS, KEXTs require digital signing by Apple using a Developer ID certificate to ensure authenticity and integrity before loading, a policy enforced since macOS 10.10 (Yosemite) and tightened in later versions. This integrates with (SIP), introduced in macOS 10.11 (), which safeguards critical system files and the kernel by blocking unsigned or tampered KEXTs from loading, even with root privileges, unless SIP is explicitly disabled in Recovery Mode. On Apple silicon Macs, additional boot-time verification in One True Recovery mode further restricts KEXT enabling for enhanced . KEXTs have been primarily utilized for hardware drivers, such as those managing processing units (GPUs) for and interfaces for . Before the transition to DriverKit, third-party KEXTs were widely used to support non-Apple peripherals, including adapters from vendors like and Atheros, as well as USB devices and storage controllers, often distributed via developer tools or updates. This era saw extensive adoption in enterprise and creative workflows, though it introduced risks mitigated by the subsequent user-space paradigm.

Solaris and Other Unix-like Systems

In , loadable kernel modules were introduced with Solaris 2.0 in July 1992, enabling dynamic extension of the with relocatable object files for drivers, file systems, and other components. The system uses tools like modload to manually load modules from object files compiled with the -r flag for relocatability, while modunload handles unloading; configuration occurs via .conf files in directories such as /kernel/drv/ or /etc/driver/drv/, which define properties like device aliases and tunable parameters. Automatic loading is managed at or through mechanisms, often triggered by or entries in /etc/system, reducing the core size to essential functions. A key feature in is support for the framework, which allows loadable modules to process network and character device I/O in a modular, layered manner; these modules implement entry points like _init, _info, and _fini for integration. Modules integrate with Zones, a technology, where global zone-loaded modules become available to non-global zones without per-zone duplication, enabling isolated environments to share kernel extensions efficiently. Other Unix-like systems in the SVR4 lineage, such as AIX and , also employ loadable kernel modules for enterprise environments, particularly to support legacy hardware without full reboots. In AIX, the cfgmgr command configures and loads device drivers by executing programs from the Configuration Rules object class in the ODM database, allowing dynamic installation during boot or runtime. HP-UX uses Dynamically Loadable Kernel Modules (DLKM) via tools like kmadmin for loading and unloading subsystems and drivers, with autoload support for on-demand activation. These implementations prioritize enterprise stability, often handling specialized hardware like mainframes or proprietary I/O in production settings. Following Oracle's acquisition of Sun Microsystems in 2010, Solaris 11 (released in 2011) emphasized modular kernel updates through the Image Packaging System (IPS), enabling faster, safer upgrades of loadable components with rollback capabilities, contrasting with Linux's more frequent but potentially disruptive module cycles by focusing on long-term stability. For example, the ZFS file system operates as a dynamically loadable module, allowing pools and file systems to be created and managed without kernel recompilation. Some traditional diagnostic modules have been deprecated in favor of the Fault Management Architecture (FMA), which uses its own loadable diagnosis engines for error detection and isolation.

Real-time and Embedded Systems

In real-time operating systems (RTOS) like , loadable modules are implemented as relocatable kernel modules and real-time processes (RTPs), which support into a running system using tools such as the linker (ld) for building executable images. Developed by Wind River since the , has enabled this capability for embedded applications, allowing RTPs to be loaded from file systems like RomFS or NFS without rebooting the target. These modules are particularly vital for device drivers in safety-critical domains such as and automotive systems, where they extend functionality for hardware interfaces while maintaining . Predictability in is enhanced by design practices that prohibit dynamic memory allocation in critical paths, preventing fragmentation and unbounded latencies that could violate timing constraints. A notable legacy example is Novell's , which from the late 1980s through the 1990s utilized NetWare Loadable Modules (NLMs) in versions like NetWare 3.x to provide modular extensions for server operations. NLMs functioned similarly to Unix executables, containing code, data, and relocation information, and were loaded dynamically to implement device drivers, file systems, and other services within the kernel's address space. This architecture supported efficient multitasking on 80x86 hardware, evolving from NetWare's origins in the early . However, NLMs and the platform were phased out in the post-2000s era, with official support for NetWare 6.5 ending in 2015 as shifted focus to Linux-based alternatives. In adaptations, real-time extensions like the patch for optimize loadable modules for low-latency environments, enabling their use in resource-constrained systems such as automotive electronic control units (ECUs). For instance, these modules can dynamically load drivers for engine management or body control, reducing worst-case latencies by 37%-72% compared to standard preemptive kernels while supporting modular hardware integration. Similarly, employs dynamically loadable resource managers—user-space servers acting as device drivers—to achieve microsecond-level latencies in setups, leveraging its architecture for predictable message-passing without traditional modules. Loadable modules in and systems face challenges including constraints from flash storage, which limits module size and update frequency due to wear-leveling and read-only boot partitions common in ECUs. Hot-swapping of modules is rare owing to certification requirements, as dynamic can introduce unpredictable latencies or stability risks in deterministic environments like controls.

Technical Considerations

Binary Compatibility

Binary compatibility of loadable kernel modules refers to the ability of a compiled to load and function correctly with a specific version without recompilation. The core challenge arises from changes in the 's Application Binary Interface (ABI), which encompasses prototypes, data structures, and exported symbols used by modules. When developers update these elements—such as altering the signature of a exported via EXPORT_SYMBOL—modules compiled against an older version may fail to load due to mismatched interfaces, leading to runtime errors or crashes. In Linux, the primary solution for mitigating these issues is module versioning through the CONFIG_MODVERSIONS option, which performs an ABI consistency check using (CRC) values computed on exported prototypes. During kernel , the Module.symvers file records names, CRCs, and namespaces; modules reference this file to embed matching CRCs, and the module loader verifies them at to prevent loading incompatible binaries. This mechanism, introduced in 1.1.85 and refined over time with tools like genksyms for checksum generation, ensures that ABI changes are detected explicitly. As of 6.11 (merged in 2024), a new tool called gendwarfksyms has been introduced to replace genksyms. It leverages debugging to generate versions, improving support for languages like that lack preprocessing compatibility with genksyms. While this enhances multi-language module , it requires kernels to be built with debug , potentially increasing time, and changes to checksums may break compatibility with older modules. In contrast, aims to maintain kernel ABI stability within major release versions (e.g., between 13.0 and 13.9), though it does not guarantee full across minor updates, requiring modules to be rebuilt less frequently than in but still periodically. These compatibility requirements have significant impacts on system maintenance, as kernel updates often necessitate recompiling third-party modules, particularly for vendor-supplied drivers like NVIDIA's modules, which depend on matching kernel headers and frequently lag behind new releases due to their closed-source nature. For instance, transitions such as from 2.6 to 3.x series introduced ABI alterations in core subsystems, causing widespread module failures and forcing users to rebuild or wait for vendor patches. To enhance flexibility, techniques like weak symbols—declared with __weak to allow optional resolution without linking errors—permit modules to gracefully handle missing features, while open-source practices avoid binary blobs to facilitate recompilation. Modern kernels further employ symbol namespaces to partition the export surface, scoping symbols to specific subsystems and reducing unintended ABI breakage by limiting global visibility.

Loading and Unloading Mechanisms

The loading of a loadable kernel module typically begins with a or utility that interfaces with the linker to incorporate the module's code into the running . In , the init_module loads an ELF image from a user-space buffer into space, performing necessary symbol relocations to resolve dependencies on or other module symbols, allocating memory for the module's structures, and executing the module's initialization function if defined. Similarly, in FreeBSD, the kldload utility invokes the linker to load a .ko , handling symbol resolution against the and loaded modules, allocating memory, and running the module's initialization routine. These processes ensure the module integrates seamlessly without requiring a , though they demand elevated privileges such as CAP_SYS_MODULE in . Unloading reverses this integration by invoking cleanup routines and freeing resources, but only if the module is safe to remove. In Linux, the delete_module system call checks the module's reference count—maintained via functions like try_module_get and module_put to track active users—and, if zero, executes the module's exit function before deallocating memory and removing the code. The rmmod command interfaces with this syscall, but forced unloading (via flags like O_TRUNC) bypasses reference checks, taints the kernel, and risks system instability if the module is in use. In FreeBSD, kldunload removes the module by identifier or name, calling its cleanup function if available; the -f option forces unloading despite usage, potentially leading to crashes or data corruption. Reference counting in FreeBSD is implicit through module dependencies and usage tracking, preventing removal while active. Kernel modules register their entry and exit points using platform-specific APIs to facilitate these operations. In , developers use the module_init macro to designate the initialization function, which runs upon loading or boot (for built-in modules), and module_exit for the cleanup function, ensuring proper resource management without conditional compilation. Dependency graphs, which map inter-module symbol requirements, are resolved prior to loading by tools like modprobe, which consults the modules.dep.bin file generated by depmod to automatically load prerequisites. modules similarly declare init and fini functions within their code, with the kernel linker resolving dependencies during kldload; bare module names rely on the kern.module_path for lookup. Error handling during loading and unloading emphasizes robustness to prevent panics. Failures such as unresolved s—due to mismatches or missing exports—result in return codes like -1 with errno set to EFAULT or ENOEXEC in , logged via messages from [printk](/page/Printk). Symbol conflicts trigger explicit errors during relocation, halting the process and reporting via [dmesg](/page/Dmesg). In , kldload returns non-zero on failures like invalid formats or issues, with verbose output via the -v flag; unloading errors, such as active usage, are reported similarly. These mechanisms allow administrators to diagnose issues without full system disruption. Optimizations enhance efficiency in module management. In , udev automates loading by monitoring hardware events and invoking modprobe to resolve and insert modules on demand, reducing boot times and manual intervention. For status monitoring, commands like lsmod display loaded modules and reference counts. In , kldstat provides detailed status of loaded modules, including IDs, references, memory addresses, and sizes, aiding in and . These tools collectively support dynamic extension while minimizing overhead.

Security Aspects

General Risks

Loadable kernel modules (LKMs) introduce significant security risks because they execute in kernel mode, granting them unrestricted access to system resources and bypassing user-space security mechanisms such as memory isolation and privilege rings. This elevated privilege level allows malicious modules to serve as an entry point for rootkits and , enabling attackers to hook system calls, manipulate kernel data structures, and evade detection tools. For instance, once loaded, a compromised module can intercept traffic, alter operations, or inject arbitrary code directly into the kernel's . Historically, LKMs have been exploited in notable s, such as the Adore rootkit released in , which used module hooks to conceal files, processes, and network connections from administrators, thereby maintaining unauthorized access. More recent threats, like the PUMAKIT rootkit discovered in 2024, demonstrate how attackers load unsigned or malicious modules to achieve persistence, often by modifying boot processes or autoloading configurations to survive system reboots. These exploits highlight the ongoing danger of LKMs as vectors for stealthy, kernel-level intrusions that can remain undetected for extended periods. Common vulnerability types in LKMs include buffer overflows, particularly in device drivers, where insufficient bounds checking on input data can lead to memory corruption and within the . Additionally, if module loading permissions are not strictly controlled—such as allowing non-root users or unsigned code—attackers can achieve , elevating from user-level access to full control. Such flaws have been documented in real-world kernel components, where overflows in parameter parsing or data handling routines expose systems to exploitation. To mitigate these risks, the principle of least privilege should be applied by restricting module loading to trusted, verified sources and minimizing the scope of privileges granted to loaded code, such as through capability-based access controls that limit kernel interactions. Auditing module sources prior to loading is essential, involving code reviews, static analysis, and integrity checks to identify potential backdoors or vulnerabilities before deployment. The impact of compromised LKMs is severe, as they can facilitate data theft by accessing sensitive memory regions, including encryption keys, user credentials, and application data, without triggering user-space alerts. Furthermore, attackers can ensure beyond reboots by integrating hooks into boot-time module loading or modifying initramfs configurations, allowing reinfection and prolonged system compromise.

Platform-Specific Protections

In Linux, Secure Boot integration requires kernel modules to be cryptographically signed using X.509 certificates, ensuring only verified modules load to prevent tampering or unauthorized code injection during boot and runtime. Module blacklisting is implemented via configuration files in /etc/modprobe.d/, where administrators can specify directives like install module_name /bin/true to block automatic or manual loading of specific modules, enhancing control over potentially risky drivers. Additionally, mandatory access control systems such as SELinux and AppArmor enforce fine-grained policies that restrict which processes or users can invoke modprobe or insmod to load modules, with SELinux using types like modutils_t for domain transitions during loading operations. On macOS, kernel extensions (KEXTs) have mandated digital signing since version 10.10 (Yosemite) in 2014, verified against Apple's root certificates or developer identities to block unsigned or revoked extensions from loading, thereby mitigating supply-chain attacks. The T2 security chip, introduced in 2018 with certain Mac models, provides hardware-enforced verification by storing and checking code signatures in its Secure Enclave, preventing runtime modifications to loaded modules even if the main CPU is compromised. Furthermore, since macOS 10.15 (), Apple's DriverKit framework relocates most new drivers to sandboxed user-space processes using XPC services and entitlements, isolating them from the kernel core to limit the of faulty or malicious code. Solaris implements module signing through the elfsign utility, which applies cryptographic signatures to loadable kernel modules using or ECDSA algorithms, with verification performed at load time against a system keyring to ensure authenticity. The Service Management Facility (SMF) integrates protections by defining services that gate module loading via dependencies and authorizations, requiring administrative privileges or specific roles to enable module-related services. Complementing this, the auditd daemon logs kernel module events, such as loading and unloading via modload and modunload, capturing attributes like timestamps, user IDs, and module paths for post-incident forensics and compliance auditing. In , security policies for loadable (kld) modules are configurable via variables and module-specific tunables, allowing restrictions on loading from untrusted paths or by non-privileged users to prevent . Capsicum's capability-based sandboxing extends protections to module interactions by confining user-space loaders like kldload, limiting access and calls that could indirectly affect module deployment. Cross-platform measures include firmware-based (TPM) attestation, where the TPM 2.0 hardware measures and attests to the integrity of the boot chain, including loaded kernel modules, by extending Platform Configuration Registers (PCRs) with module hashes for remote verification. In specifically, the Integrity Measurement Architecture (IMA) performs runtime integrity checks on kernel modules during loading, computing and attesting SHA-1 or stronger hashes against a policy-defined appraisal list to detect alterations before execution.

Module Signing and Verification

Module signing employs certificates to cryptographically sign loadable modules, ensuring their authenticity and integrity before loading into the . In , this feature is enabled via the CONFIG_MODULE_SIG option, introduced in version 3.7 released in December 2012, which allows modules to be signed using a private key during the build or . The signing typically involves generating a public-private key pair compliant with standards, supporting algorithms such as or ECDSA with hashes like SHA-256 or SHA-512. In November 2025, patches were proposed to remove support for the insecure hash in module signing to mitigate collision vulnerabilities. Tools like the scripts/sign-file utility from the source tree facilitate manual signing by appending a to the module file, requiring the hash algorithm, private key, public key certificate, and the target module as inputs. During module loading, the kernel verifies the signature against trusted public keys stored in its built-in keyring, such as .builtin_trusted_keys, rejecting any unsigned or invalidly signed modules if enforcement is enabled via CONFIG_MODULE_SIG_FORCE. In Secure Boot environments, unsigned modules can be temporarily allowed through tools like mokutil, which manages Machine Owner Keys (MOKs) for enrolling custom keys during boot, though this requires user intervention and reduces security. This verification occurs at load time to prevent tampering, but it can be disabled at runtime via kernel parameters like module.sig_enforce=0, albeit not recommended for production systems. Adoption of module signing has become widespread across operating systems to mitigate attacks. In Windows, kernel-mode drivers have been mandated to undergo attestation signing through the Windows Hardware Developer Center Dashboard since and , requiring an Extended Validation (EV) code-signing certificate from a trusted before applies its signature. Linux distributions like have enforced signed modules with Secure Boot since Fedora 24 in 2016, integrating automatic signing for third-party modules via akmods and blacklisting revoked keys in the system blacklist keyring. In macOS, kernel extensions (kexts) must be signed with a Developer ID certificate issued under Apple's root CA, ensuring only approved extensions load on systems with enabled. For handling compromised keys, revocation mechanisms vary but focus on blacklisting rather than dynamic CRL fetching to avoid runtime dependencies. In , revoked public keys are added to the .system_keyring_blacklist, preventing signed with them from loading, as implemented in distributions like and . Tools such as pesign can generate signatures for EFI-related components, but core revocation relies on static keyring updates during builds or boot. The primary benefit of module signing is enhanced kernel integrity, as it blocks the loading of unauthorized or altered modules, thereby reducing the against rootkits and . However, it does not guarantee bug-free code or protect against vulnerabilities in signed modules themselves. In open-source environments, poses significant challenges, including secure distribution of signing keys across distributions, potential key exposure in public repositories, and the need for coordinated revocation without disrupting legitimate updates.

Integration in Modern Kernels

In contemporary kernel architectures, loadable kernel modules remain integral to and ecosystems, particularly for enabling hypervisors like the (KVM). KVM operates through dedicated kernel modules, such as the core kvm.ko and architecture-specific variants like kvm-intel.ko or kvm-amd.ko, which transform the into a type-1 capable of hosting multiple virtual machines with near-native performance on hardware supporting virtualization extensions. This modular design facilitates dynamic resource allocation in environments, where modules can be loaded on demand to support scalable without rebooting the host system. Containerized deployments have further evolved module usage through technologies like the extended (eBPF), fully integrated since Linux kernel 4.4 in 2015. eBPF enables the of verified, sandboxed programs directly into the kernel, bypassing traditional modules for tasks such as network filtering, tracing, and security monitoring in container orchestrators like . This approach enhances modularity in hybrid environments by allowing runtime extensions without modifying kernel or risking system instability from full module loads. Hybrid models are reducing direct kernel module dependencies by shifting functionality to user space where possible. For example, the (FUSE) framework uses a kernel to user-space filesystem logic, enabling developers to implement custom solutions without embedding complex code in the kernel core. Similarly, Android's Generic Kernel Image (GKI) initiative, launched with in 2020 and enforced for all devices on kernel 5.10 and higher starting with in 2021, standardizes the while isolating SoC and board-specific drivers as loadable vendor s. This separation promotes faster security updates and reduces fragmentation across diverse hardware. Performance optimizations in modern kernels leverage advanced techniques for module efficiency. Research into just-in-time (JIT) compilation targets in-kernel domain-specific languages, such as , where automated synthesis of JIT compilers generates optimized at , improving execution speed for packet processing and tasks without compromising kernel safety. For AI workloads, specialized loadable modules under the compute accelerators subsystem support like GPUs and neural processing units (NPUs), enabling dynamic driver loading to accelerate and directly in kernel . These enhancements ensure modules adapt to emerging demands while maintaining low-latency operations. Security challenges persist in integrating modularity with protective mechanisms, notably the kernel lockdown feature introduced in 5.4 in 2019. In lockdown mode—activated via the lockdown boot parameter with integrity or confidentiality levels—unsigned s cannot be loaded, and operations like or are restricted to prevent tampering with the running kernel. This balance requires careful module signing and verification to preserve extensibility in secure environments without exposing vulnerabilities. Future trends point toward safer, verified modules tailored for and , where resource constraints amplify risks from traditional loads. eBPF's verifier-enforced sandboxing is driving adoption as a preferred mechanism for edge extensions, offering crash-resistant programmability for real-time data processing on low-power devices. In networking specifically, eBPF is supplanting conventional modules for hooks like XDP () and (Traffic Control), providing safer, hot-swappable alternatives that reduce kernel bloat and enhance performance in distributed edge networks.

References

  1. [1]
    Building External Modules — The Linux Kernel documentation
    ### Summary of Loadable Kernel Modules in Linux (from https://docs.kernel.org/kbuild/modules.html)
  2. [2]
    Linux Loadable Kernel Module HOWTO
    ### Extracted Introduction and Definition
  3. [3]
    Linux Kernel Makefiles
    $$(obj-m) specifies object files which are built as loadable kernel modules. A module may be built from one source file or several source files. In the case ...
  4. [4]
  5. [5]
    Kernel modules — The Linux Kernel documentation
    A kernel module (or loadable kernel mode) is an object file that contains code that can extend the kernel functionality at runtime (it is loaded as needed)
  6. [6]
    Differences Between Kernel Modules and User Programs
    Kernel modules can be dynamically loaded. The collection of subroutines and data that constitute a device driver can be compiled into a single loadable module ...
  7. [7]
    2. Introduction to Linux Loadable Kernel Modules
    But you can also add code to the Linux kernel while it is running. A chunk of code that you add in this way is called a loadable kernel module.
  8. [8]
    kld(4) - FreeBSD Manual Pages
    kld is a dynamic kernel linker that allows adding/removing functionality from a running system, replacing the deprecated LKM facility.
  9. [9]
  10. [10]
    [PDF] Writing Device Drivers - Bitsavers.org
    Mar 27, 1990 · Loadable Drivers. Chapter 5 - Driver Development Topics. 93. All Sun machines support loadable drivers in SunOS 4.1. This feature allows you to ...Missing: history | Show results with:history
  11. [11]
    Significant changes from NetBSD 0.8 to 0.9
    ... loadable kernel modules code. (cgd); misc clean up miscfs and isofs filesystems. they now have their own vnode types and malloc types. (cgd); chmod(1)
  12. [12]
  13. [13]
    Kernel module signing facility
    The kernel module signing facility cryptographically signs modules during installation and then checks the signature upon loading the module.
  14. [14]
    [PDF] Operating System Structure - Carnegie Mellon University
    (Loadable) Kernel Modules. • Problem - Bob has a ... monolithic kernel with a “small, clean, logical” set of ... – Monolithic kernel again runs as fast or faster ...
  15. [15]
    [PDF] Safe Kernel Extensibility and Instrumentation With Webassembly
    Aug 16, 2025 · Because modules execute directly in kernel mode, they bypass many safeguards provided to user-space applications, making debugging challenging ...
  16. [16]
    [PDF] Enabling dynamic analysis of binary Linux-based IoT kernel modules
    Jun 2, 2022 · Using this observation we can address the above challenge as follows: 1) transfer debugging information from the UKM to the CKM modules to ...
  17. [17]
    Tracing unsigned modules - LWN.net
    Mar 5, 2014 · Loadable kernel modules have been part of the kernel landscape for ... system crash. The tracepoint code does allow TAINT_CRAP (modules ...
  18. [18]
    None
    ### Debugging Challenges for Kernel Modules
  19. [19]
    "Automated Bug Detection and Replay for COTS Linux Kernel ...
    Feb 1, 2020 · However, validation and debugging of LKMs are inherently challenging, because of its special interface buried deeply in the kernel, and non- ...
  20. [20]
    Implementation of Loadable Kernel Modules in JOS - Academia.edu
    Performance analysis reveals latency and memory overhead associated with dynamically loading modules. Security concerns arise as LKMs run with full kernel ...
  21. [21]
    stable-api-nonsense.rst - The Linux Kernel Archives
    This is being written to try to explain why Linux **does not have a binary kernel interface, nor does it have a stable kernel interface**. .. note:: Please ...<|separator|>
  22. [22]
    A new version of modversions - LWN.net
    Aug 26, 2024 · There are distributors that try to maintain ABI compatibility for kernel modules, even though the kernel project itself is indifferent (or ...
  23. [23]
    [PDF] Automated Bug Detection and Replay for COTS Linux Kernel ...
    The major challenge to fix a resource leak bug is to find the right place in the code to de-allocate the leaked memory. Fixing this bug is practically more ...
  24. [24]
    Re: PCI driver module unload race? - The Linux-Kernel Archive
    Mar 8, 2003 · no device will get unregistered from driver, causing memory leaks or even crashes. Well, and after reading sysfs code: there is no problem ...Linux 5.4-rc7Linux 2.6.31-rc4More results from lkml.indiana.edu
  25. [25]
    [PDF] KAL: Kernel-assisted Non-invasive Memory Leak Tolerance with a ...
    KAL consists of a Linux kernel extension and a leak detector ... When the functionality provided by a kernel module is no longer required, it can be unloaded.
  26. [26]
    modprobe(8) - Linux manual page - man7.org
    modprobe intelligently adds or removes a module from the Linux kernel. Note that for convenience, there is no difference between _ and - in module names.
  27. [27]
    The kernel's command-line parameters
    modprobe looks through the kernel command line (/proc/cmdline) and collects module parameters when it loads a module, so the kernel command line can be used ...
  28. [28]
    Linux kernel licensing rules
    Loadable kernel modules also require a MODULE_LICENSE() tag. This tag is neither a replacement for proper source code license information (SPDX-License ...
  29. [29]
    Proprietary kernel modules - the boundary shifts? - LWN.net
    Oct 22, 2002 · Linus Torvalds's longstanding policy - never actually written down anywhere - has been that binary-only kernel modules were permissible as long ...
  30. [30]
    Linux: Abusing the MODULE_LICENSE Macro - OSnews
    Apr 27, 2004 · In 2001 during the 2.4 kernel development cycle, a MODULE_LICENSE macro was introduced which allows a module to explicitly declare how it is ...
  31. [31]
    The Linux Kernel Archives
    No readable text found in the HTML.<|control11|><|separator|>
  32. [32]
    Kernel overview | Android Open Source Project
    Oct 9, 2025 · The Android kernel is based on an upstream Linux Long Term Supported (LTS) kernel. At Google, LTS kernels are combined with Android-specific patches.
  33. [33]
    FreeBSD 2.0 Release Notes
    Feb 21, 2021 · ... Loadable Kernel Modules ----------------------- David Greenman incorporated NetBSD's port of Terry Lambert's loadable kernel module support.
  34. [34]
    Chapter 10. Configuring the FreeBSD Kernel
    Aug 29, 2025 · The kernel is the core of the FreeBSD operating system. It is responsible for managing memory, enforcing security controls, networking, disk access, and much ...
  35. [35]
    kldload - FreeBSD Manual Pages
    The kldload utility loads file.ko into the kernel using the kernel linker. Note that if multiple modules are specified then an attempt will be made to load ...<|control11|><|separator|>
  36. [36]
    Chapter 9. Writing FreeBSD Device Drivers
    Feb 18, 2025 · Running make with this makefile will create a file skeleton.ko that can be loaded into the kernel by typing: # kldload -v ./skeleton.ko.Dynamic Kernel Linker Facility... · Character Devices · Block Devices (Are Gone)
  37. [37]
    witness(4)
    ### Summary: Witness Framework and Kernel Modules/Deadlock Detection
  38. [38]
    Hardware Tuning and Troubleshooting | pfSense Documentation
    Aug 26, 2025 · There is experimental support for the Chelsio TCP Offload Engine (TOE) via the t4_tom kernel module. TOE offloads the entire TCP connection ...
  39. [39]
    FreeBSD Porter's Handbook
    In FreeBSD, anyone may submit a new port, or volunteer to maintain an existing unmaintained port. No special commit privilege is needed. Chapter 2. Making a New ...<|control11|><|separator|>
  40. [40]
    Developing Kernel Extensions (Kexts) for macOS - Apriorit
    Mar 4, 2024 · A kext bundle must contain two files: a compiled binary file with executable code; an Info.plist file containing information about the kernel ...Missing: launchd | Show results with:launchd
  41. [41]
    I/O Kit Overview - Apple Developer
    Aug 8, 2013 · Essential information for programming in the OS X kernel. Includes a high-level overview.Missing: 10.0 2001
  42. [42]
    Implementing drivers, system extensions, and kexts - Apple Developer
    In macOS 11 and later, the kernel doesn't load a kext if an equivalent DriverKit solution exists. You may continue to use kexts in macOS 10.15 and earlier.
  43. [43]
    kextload(8) - Linux Manpages Online - man.cx manual pages
    The kextload program is used to explicitly load kernel extensions (kexts), validate them to see that they can be loaded by other mechanisms, such as kextd(8),<|separator|>
  44. [44]
    How can I force a Mac OS X kext to load prior to login? - Super User
    Sep 26, 2009 · Use a launch daemon to run `/sbin/kextload` at startup by creating a plist file in `/Library/LaunchDaemons` and loading it with `launchctl load ...Missing: Info. Xcode
  45. [45]
    System Extensions and DriverKit - WWDC19 - Apple Developer
    May 23, 2019 · One of the next steps in modernizing and improving the security and reliability of macOS is to provide a better architecture for kernel extensions and drivers.
  46. [46]
    System extensions in macOS - Apple Support
    Oct 27, 2021 · For a Mac with macOS 11 or later, if third-party kernel extensions (kexts) are enabled, they can't be loaded into the kernel on demand. They ...
  47. [47]
    Securely extending the kernel in macOS - Apple Support
    Feb 18, 2021 · Kexts must be explicitly enabled for a Mac with Apple silicon by holding the power button at startup to enter into One True Recovery (1TR) mode.
  48. [48]
    Disabling and Enabling System Integrity Protection - Apple Developer
    System Integrity Protection (SIP) in macOS protects the entire system by preventing the execution of unauthorized code. The system automatically authorizes ...
  49. [49]
    Guide for Apple IT: macOS System and Kernel Extensions
    Jan 7, 2022 · What Are Kernel Extensions? Kernel extensions (or kexts) let developers load code directly into the macOS kernel. By giving developers these ...
  50. [50]
  51. [51]
    modload - man pages section 8: System Administration Commands
    Jul 27, 2022 · The modload command loads the kernel module filename into the running system. filename is an object file produced using ld(1) with the –ztype=kmod option.Missing: modlink | Show results with:modlink
  52. [52]
    Oracle Solaris 11.1 Administration: Devices and File Systems
    A kernel module is a software component that is used to perform a specific task on the system. An example of a loadable kernel module is a device driver that is ...Missing: definition | Show results with:definition
  53. [53]
    Dynamically Loaded Kernel (Solaris Transition Guide)
    Drivers, file systems, STREAMS modules, and other modules are loaded automatically as needed, either at boot time or at runtime. When these modules are no ...Missing: modlink | Show results with:modlink
  54. [54]
    STREAMS Module Configuration
    A loadable module must provide linkage information to the kernel in an initialized modlstrmod(9S) and three entry points: _init(9E), _info(9E), and _fini(9E).
  55. [55]
    Software Requirements for Oracle Solaris Kernel Zones
    Most Oracle Solaris features work out-of-box within a Kernel Zone. Some features require additional support in the Kernel Zone hypervisor, in the Kernel Zone ...Missing: loadable integration
  56. [56]
    cfgmgr Command - IBM
    The `cfgmgr` command configures devices and optionally installs device software by running programs specified in the Configuration Rules object class.Missing: drivers | Show results with:drivers
  57. [57]
    kmadmin(1m) - FreeBSD Manual Pages
    ... load during system boot or init time Not all kernel modules support dynamic loading. Not all dynamically loadable modules support boot time loading. Options ...
  58. [58]
    [PDF] Solaris 11 - Oracle
    System Update Redefined Only on Solaris. • Safe rollback. • 4x faster updates ... HW acquisition price from Oracle's price list: $467,856 http://www ...
  59. [59]
    Chapter 6 Managing Oracle Solaris ZFS File Systems
    A ZFS file system is built on top of a storage pool. File systems can be dynamically created and destroyed without requiring you to allocate or format any ...Missing: loading | Show results with:loading
  60. [60]
    [PDF] Getting to know the Solaris Fault Management Architecture (FMA)
    Feb 26, 2004 · How does FMA work? • Kernel sends error events to the fault manager daemon. (fmd), which routes the events to modules based on.Missing: loadable | Show results with:loadable
  61. [61]
    [PDF] VxWorks Programmer's Guide, 5.5 - PREX
    Mar 5, 2003 · 6.2.4 Loading and Unloading Object Modules from the Target Shell. Object modules can be dynamically loaded into a running VxWorks system with.<|separator|>
  62. [62]
    A Quick Overview of VxWorks - Raima Documentation
    VxWorks uses relocatable kernel modules and Real Time Processes (RTPs) that run in their own address space. RTPs contain tasks that are scheduled.
  63. [63]
    VxWorks SDK Application Developer Guide - Wind River Labs
    RTPs produce a VXE which can be loaded from a target file system (RomFS, NFS, SD card) or directly from a WRDBG debug connection. DKM - A kernel application ...Missing: loadable | Show results with:loadable
  64. [64]
    [PDF] Memory Management in VxWorks compared to RTLinux - BME-MIT
    Nov 17, 2006 · RTLinux only supports static memory allocation while VxWorks supports dynamic memory allocation. This also makes RTLinux more predictable but it ...
  65. [65]
    None
    ### Summary of NetWare Loadable Modules (NLMs)
  66. [66]
    NetWare - Wikipedia
    In 1991, Novell introduced cheaper peer-to-peer networking products for DOS and Windows, unrelated to their server-centric NetWare. These are NetWare Lite 1.0 ( ...
  67. [67]
    [PDF] Challenges Using Linux as a Real-Time Operating System
    This paper highlights aspects of the Linux Kernel that require special attention for real-time applications and covers more topics than addressed by the Build ...Missing: flash hot-
  68. [68]
    [PDF] Linux in Automotive Environment - Chalmers Publication Library
    Linux in Automotive Environment is a Master Thesis at the department of Computer Science and. Engineering at Chalmers University of Technology.
  69. [69]
    - Dynamic Linking - QNX
    QNX Neutrino compared with Microsoft Windows; How QNX Neutrino is unique. Resource managers. Logging In, Logging Out, and Shutting Down. root or non-root ...
  70. [70]
    The QNX Neutrino Microkernel
    The QNX Neutrino microkernel, procnto, implements the core POSIX features used in embedded realtime systems, along with the fundamental QNX Neutrino message- ...
  71. [71]
    Managing flash storage with Linux - Bootlin
    Dec 2, 2012 · This article gives technical details about how Linux supports flash storage devices. It should mostly interest people creating embedded and multimedia devices.
  72. [72]
    [PDF] Hotswapping Linux kernel modules
    To support hotswapping, both the operating system kernel and existing kernel extensions must be modified. Additionally, hotswapping may degrade the system ...
  73. [73]
    Version Control in Modules - Linux Device Drivers, Second Edition ...
    The idea is that a module is incompatible with a different kernel version only if the software interface offered by the kernel has changed.
  74. [74]
    KernelModulePackages - FreeBSD Wiki
    Oct 18, 2023 · While FreeBSD provides ABI-backward compatibility in user space, it does not provide kernel ABI-backward compatibility, a harder goal to achieve.
  75. [75]
    Linux kernel vs nvidia driver version
    Mar 22, 2024 · Whether or not the nvidia driver and kernel modules will work with a specific kernel version is based on how their installation is handled.
  76. [76]
    Symbol Namespaces - The Linux Kernel documentation
    There is no default namespace if none is defined. modpost and kernel/module/main.c make use the namespace at build time or module load time, respectively ...
  77. [77]
    init_module(2) - Linux manual page - man7.org
    init_module() loads an ELF image into kernel space, performs any necessary symbol relocations, initializes module parameters to values provided by the caller,
  78. [78]
    kldload(8)
    ### Summary of kldload for FreeBSD Kernel Modules
  79. [79]
    delete_module(2): unload kernel module - Linux man page - Die.net
    Otherwise, if the reference count for the module (i.e., the number of processes currently using the module) is zero, then the module is immediately unloaded. 3.
  80. [80]
    Driver Basics — The Linux Kernel documentation
    ### Summary of `module_init` and `module_exit` Macros and Dependencies
  81. [81]
    kldunload(8)
    ### Summary of kldunload(8)
  82. [82]
    modprobe(8) - Linux manual page
    ### Summary of modprobe and Dependency Resolution
  83. [83]
    Unresolved Symbols
    The most common and most frustrating failure in loading an LKM is a bunch of error messages about unresolved symbols, like this: msdos.o: unresolved symbol ...
  84. [84]
    kldstat(8)
    ### Summary of kldstat(8) for Module Status
  85. [85]
    [PDF] Detecting Kernel-Level Rootkits Through Binary Analysis - CS@UCSB
    However, for operating systems that support loadable kernel modules (e.g., Linux and So- laris), a new type of rootkit has recently emerged. These rootkits are ...
  86. [86]
    [PDF] Kernel Rootkits - GIAC Certifications
    Loadable Kernel Modules (LKMs) allow the running operating system kernel to be extended dynamically. Most modern UNIX-like systems, including Solaris, ...
  87. [87]
    Boot or Logon Autostart Execution: Kernel Modules and Extensions
    Jan 24, 2020 · The REPTILE rootkit is implemented as a loadable kernel module (LKM). Skidmap has the ability to install several loadable kernel modules (LKMs) ...
  88. [88]
    [PDF] Page 1 - EECS Instructional
    • 1999. – Adore LKM kit released by TESO. – “Cult ... Rooting a Windows Kernel Rootkit. • Microsoft ... – Rootkit can't hook itself, so built-in commands.
  89. [89]
    Declawing PUMAKIT — Elastic Security Labs
    Dec 11, 2024 · PUMAKIT is a sophisticated loadable kernel module (LKM) rootkit that employs advanced stealth mechanisms to hide its presence and maintain ...
  90. [90]
    [PDF] Real-World Buffer Overflow Protection for Userspace & Kernelspace
    To evaluate the security of our approach, we exploited real-world user/kernel pointer dereference and buffer overflow vulnerabilities in the Linux kernel. Our ...
  91. [91]
    [PDF] Exploiting the Linux Kernel for Privilege Escalation - ISEC
    Exploited as a zero-day in the wild. ○. Targeted Android devices. Page 11. Double Fetch Vulnerabilities. ○. Kernel deals with untrusted pointers from user space.
  92. [92]
    LeMo: Protecting Kernel with Least Privilege Modules - IEEE Xplore
    Jun 6, 2019 · Once the malicious module is loaded in the kernel, it can almost access the entire kernel. This breaks the principle of least privilege. To ...
  93. [93]
    Linux kernel security tunables everyone should consider adopting
    Mar 6, 2024 · However, uncontrolled kernel module loading might pose a significant risk to system integrity. Unlike regular programs, which get executed ...Secure Boot · Kexec · Kernel Address Space Layout...
  94. [94]
  95. [95]
    Kernel module signing facility — The Linux Kernel documentation
    ### Summary of Error Handling in Module Loading (Kernel Module Signing)
  96. [96]
  97. [97]
    Signed Kernel Modules Support For Linux 3.7 - Phoronix
    Oct 16, 2012 · The accepted patches come via Red Hat's David Howells. The module signing support in its earliest form date back to 2004, but it wasn't agreed ...
  98. [98]
    Working with Kernel Modules - Fedora Docs
    Signing Kernel Modules for Secure Boot. Fedora includes support for the UEFI Secure Boot feature, which means that Fedora can be installed and run on systems ...Missing: 2016 | Show results with:2016
  99. [99]
    Driver Signing With Digital Signatures - Windows - Microsoft Learn
    Jul 11, 2025 · Starting in Windows 10 and Windows Server 2016, the Windows Hardware Developer Center Dashboard must sign kernel-mode drivers. The process ...Missing: post- | Show results with:post-
  100. [100]
    Chapter 1. Working with kernel modules | Red Hat Enterprise Linux | 7
    Kernel modules extend the kernel's capabilities, providing device drivers and file system support. They can be loaded/unloaded dynamically, and their ...
  101. [101]
    rhboot/pesign: Linux tools for signed PE-COFF binaries - GitHub
    Signing tools for PE-COFF binaries. Compliant with the PE and Authenticode specifications. (These serve a similar purpose to Microsoft's SignTool.exe, except ...
  102. [102]
    KVM - The Linux Kernel documentation
    The Definitive KVM (Kernel-based Virtual Machine) API Documentation · 1. General description · 2. Restrictions · 3. Extensions · 4. API description · 5.
  103. [103]
    What is KVM (Kernel-Based Virtual Machine)? - Amazon AWS
    Kernel-based Virtual Machine (KVM) is a software feature that you can install on physical Linux machines to create virtual machines.
  104. [104]
    eBPF Explained: Use Cases, Concepts, and Architecture - Tigera
    eBPF is a kernel technology (fully available since Linux 4.4). It lets programs run without needing to add additional modules or modify the kernel source code.
  105. [105]
    What is eBPF? An Introduction and Deep Dive into the eBPF ...
    eBPF is a revolutionary technology with origins in the Linux kernel that can run sandboxed programs in a privileged context such as the operating system kernel.
  106. [106]
    libfuse/libfuse: The reference implementation of the Linux FUSE ...
    FUSE (Filesystem in Userspace) is an interface for userspace programs to export a filesystem to the Linux kernel. The FUSE project consists of two ...Libfuse · Releases 57 · Issues 49 · DiscussionsMissing: alternatives | Show results with:alternatives
  107. [107]
    Generic Kernel Image (GKI) project | Android Open Source Project
    Oct 9, 2025 · The Generic Kernel Image (GKI) project addresses kernel fragmentation by unifying the core kernel and moving SoC and board support out of the core kernel into ...Missing: standardize 2021
  108. [108]
    Synthesizing JIT Compilers for In-Kernel DSLs - PMC - NIH
    This paper presents a new technique for synthesizing JIT compilers for in-kernel DSLs. The technique creates per-instruction compilers.Missing: modules | Show results with:modules
  109. [109]
    Introduction - The Linux Kernel documentation
    The Linux compute accelerators subsystem is designed to expose compute accelerators in a common way to user-space and provide a common set of functionality.
  110. [110]
  111. [111]
    Chapter 44. Understanding the eBPF networking features in RHEL 8
    In networking, you can use eBPF to complement or replace kernel packet processing. Depending on the hook you use, eBPF programs have, for example: Read and ...Missing: traditional | Show results with:traditional