vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / hardware / cpu / intel-sgx.nix
blob79d0bc1599eeef7f05569ad4d28d7514cc17550f
1 { config, lib, ... }:
2 let
3   cfg = config.hardware.cpu.intel.sgx;
4   defaultPrvGroup = "sgx_prv";
5 in
7   options.hardware.cpu.intel.sgx.enableDcapCompat = lib.mkOption {
8     description = ''
9       Whether to enable backward compatibility for SGX software build for the
10       out-of-tree Intel SGX DCAP driver.
12       Creates symbolic links for the SGX devices `/dev/sgx_enclave`
13       and `/dev/sgx_provision` to make them available as
14       `/dev/sgx/enclave`  and `/dev/sgx/provision`,
15       respectively.
16     '';
17     type = lib.types.bool;
18     default = true;
19   };
21   options.hardware.cpu.intel.sgx.provision = {
22     enable = lib.mkEnableOption "access to the Intel SGX provisioning device";
23     user = lib.mkOption {
24       description = "Owner to assign to the SGX provisioning device.";
25       type = lib.types.str;
26       default = "root";
27     };
28     group = lib.mkOption {
29       description = "Group to assign to the SGX provisioning device.";
30       type = lib.types.str;
31       default = defaultPrvGroup;
32     };
33     mode = lib.mkOption {
34       description = "Mode to set for the SGX provisioning device.";
35       type = lib.types.str;
36       default = "0660";
37     };
38   };
40   config = lib.mkMerge [
41     (lib.mkIf cfg.provision.enable {
42       assertions = [
43         {
44           assertion = lib.hasAttr cfg.provision.user config.users.users;
45           message = "Given user does not exist";
46         }
47         {
48           assertion = (cfg.provision.group == defaultPrvGroup) || (lib.hasAttr cfg.provision.group config.users.groups);
49           message = "Given group does not exist";
50         }
51       ];
53       users.groups = lib.optionalAttrs (cfg.provision.group == defaultPrvGroup) {
54         "${cfg.provision.group}" = { };
55       };
57       services.udev.extraRules = with cfg.provision; ''
58         SUBSYSTEM=="misc", KERNEL=="sgx_provision", OWNER="${user}", GROUP="${group}", MODE="${mode}"
59       '';
60     })
61     (lib.mkIf cfg.enableDcapCompat {
62       services.udev.extraRules = ''
63         SUBSYSTEM=="misc", KERNEL=="sgx_enclave",   SYMLINK+="sgx/enclave"
64         SUBSYSTEM=="misc", KERNEL=="sgx_provision", SYMLINK+="sgx/provision"
65       '';
66     })
67   ];