• Michael Ellerman's avatar
    Merge branch 'topic/secureboot' into next · d34a5709
    Michael Ellerman authored
    Merge the secureboot support, as well as the IMA changes needed to
    support it.
    
    From Nayna's cover letter:
      In order to verify the OS kernel on PowerNV systems, secure boot
      requires X.509 certificates trusted by the platform. These are
      stored in secure variables controlled by OPAL, called OPAL secure
      variables. In order to enable users to manage the keys, the secure
      variables need to be exposed to userspace.
    
      OPAL provides the runtime services for the kernel to be able to
      access the secure variables. This patchset defines the kernel
      interface for the OPAL APIs. These APIs are used by the hooks, which
      load these variables to the keyring and expose them to the userspace
      for reading/writing.
    
      Overall, this patchset adds the following support:
        * expose secure variables to the kernel via OPAL Runtime API interface
        * expose secure variables to the userspace via kernel sysfs interface
        * load kernel verification and revocation keys to .platform and
          .blacklist keyring respectively.
    
      The secure variables can be read/written using simple linux
      utilities cat/hexdump.
    
      For example:
      Path to the secure variables is: /sys/firmware/secvar/vars
    
        Each secure variable is listed as directory.
        $ ls -l
        total 0
        drwxr-xr-x. 2 root root 0 Aug 20 21:20 db
        drwxr-xr-x. 2 root root 0 Aug 20 21:20 KEK
        drwxr-xr-x. 2 root root 0 Aug 20 21:20 PK
    
      The attributes of each of the secure variables are (for example: PK):
        $ ls -l
        total 0
        -r--r--r--. 1 root root  4096 Oct  1 15:10 data
        -r--r--r--. 1 root root 65536 Oct  1 15:10 size
        --w-------. 1 root root  4096 Oct  1 15:12 update
    
      The "data" is used to read the existing variable value using
      hexdump. The data is stored in ESL format. The "update" is used to
      write a new value using cat. The update is to be submitted as AUTH
      file.
    d34a5709
opal.c 29.8 KB