vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / security / lock-kernel-modules.nix
blob3a1ad4d8b3747b0970b3e1bbb37fb43f134930ba
1 { config, lib, ... }:
3 with lib;
6   meta = {
7     maintainers = [ maintainers.joachifm ];
8   };
10   options = {
11     security.lockKernelModules = mkOption {
12       type = types.bool;
13       default = false;
14       description = ''
15         Disable kernel module loading once the system is fully initialised.
16         Module loading is disabled until the next reboot. Problems caused
17         by delayed module loading can be fixed by adding the module(s) in
18         question to {option}`boot.kernelModules`.
19       '';
20     };
21   };
23   config = mkIf config.security.lockKernelModules {
24     boot.kernelModules = concatMap (x:
25       optionals (x.device != null) (
26         if x.fsType == "vfat"
27         then [ "vfat" "nls-cp437" "nls-iso8859-1" ]
28         else [ x.fsType ])
29       ) config.system.build.fileSystems;
31     systemd.services.disable-kernel-module-loading = {
32       description = "Disable kernel module loading";
34       wants = [ "systemd-udevd.service" ];
35       wantedBy = [ config.systemd.defaultUnit ];
37       after =
38         [ "firewall.service"
39           "systemd-modules-load.service"
40            config.systemd.defaultUnit
41         ];
43       unitConfig.ConditionPathIsReadWrite = "/proc/sys/kernel";
45       serviceConfig =
46         { Type = "oneshot";
47           RemainAfterExit = true;
48           TimeoutSec = 180;
49         };
51       script = ''
52         ${config.systemd.package}/bin/udevadm settle
53         echo -n 1 >/proc/sys/kernel/modules_disabled
54       '';
55     };
56   };