1. 08 Jan, 2022 5 commits
    • Andrew Zaborowski's avatar
      keys: X.509 public key issuer lookup without AKID · 7d30198e
      Andrew Zaborowski authored
      There are non-root X.509 v3 certificates in use out there that contain
      no Authority Key Identifier extension (RFC5280 section 4.2.1.1).  For
      trust verification purposes the kernel asymmetric key type keeps two
      struct asymmetric_key_id instances that the key can be looked up by,
      and another two to look up the key's issuer.  The x509 public key type
      and the PKCS7 type generate them from the SKID and AKID extensions in
      the certificate.  In effect current code has no way to look up the
      issuer certificate for verification without the AKID.
      
      To remedy this, add a third asymmetric_key_id blob to the arrays in
      both asymmetric_key_id's (for certficate subject) and in the
      public_keys_signature's auth_ids (for issuer lookup), using just raw
      subject and issuer DNs from the certificate.  Adapt
      asymmetric_key_ids() and its callers to use the third ID for lookups
      when none of the other two are available.  Attempt to keep the logic
      intact when they are, to minimise behaviour changes.  Adapt the
      restrict functions' NULL-checks to include that ID too.  Do not modify
      the lookup logic in pkcs7_verify.c, the AKID extensions are still
      required there.
      
      Internally use a new "dn:" prefix to the search specifier string
      generated for the key lookup in find_asymmetric_key().  This tells
      asymmetric_key_match_preparse to only match the data against the raw
      DN in the third ID and shouldn't conflict with search specifiers
      already in use.
      
      In effect implement what (2) in the struct asymmetric_key_id comment
      (include/keys/asymmetric-type.h) is probably talking about already, so
      do not modify that comment.  It is also how "openssl verify" looks up
      issuer certificates without the AKID available.  Lookups by the raw
      DN are unambiguous only provided that the CAs respect the condition in
      RFC5280 4.2.1.1 that the AKID may only be omitted if the CA uses
      a single signing key.
      
      The following is an example of two things that this change enables.
      A self-signed ceritficate is generated following the example from
      https://letsencrypt.org/docs/certificates-for-localhost/, and can be
      looked up by an identifier and verified against itself by linking to a
      restricted keyring -- both things not possible before due to the missing
      AKID extension:
      
      $ openssl req -x509 -out localhost.crt -outform DER -keyout localhost.key \
        -newkey rsa:2048 -nodes -sha256 \
        -subj '/CN=localhost' -extensions EXT -config <( \
         echo -e "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\n" \
                "subjectAltName=DNS:localhost\nkeyUsage=digitalSignature\n" \
      	  "extendedKeyUsage=serverAuth")
      $ keyring=`keyctl newring test @u`
      $ trusted=`keyctl padd asymmetric trusted $keyring < localhost.crt`; \
        echo $trusted
      39726322
      $ keyctl search $keyring asymmetric dn:3112301006035504030c096c6f63616c686f7374
      39726322
      $ keyctl restrict_keyring $keyring asymmetric key_or_keyring:$trusted
      $ keyctl padd asymmetric verified $keyring < localhost.crt
      Signed-off-by: default avatarAndrew Zaborowski <andrew.zaborowski@intel.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Acked-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Acked-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      7d30198e
    • Christophe Jaillet's avatar
      tpm_tis: Fix an error handling path in 'tpm_tis_core_init()' · e96d5282
      Christophe Jaillet authored
      Commit 79ca6f74 ("tpm: fix Atmel TPM crash caused by too frequent
      queries") has moved some code around without updating the error handling
      path.
      
      This is now pointless to 'goto out_err' when neither 'clk_enable()' nor
      'ioremap()' have been called yet.
      
      Make a direct return instead to avoid undoing things that have not been
      done.
      
      Fixes: 79ca6f74 ("tpm: fix Atmel TPM crash caused by too frequent queries")
      Signed-off-by: default avatarChristophe Jaillet <christophe.jaillet@wanadoo.fr>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      e96d5282
    • AngeloGioacchino Del Regno's avatar
      tpm: tpm_tis_spi_cr50: Add default RNG quality · d2704808
      AngeloGioacchino Del Regno authored
      To allow this device to fill the kernel's entropy pool at boot,
      setup a default quality for the hwrng found in Cr50.
      
      After some testing with rngtest and dieharder it was, in short,
      discovered that the RNG produces fair quality randomness, giving
      around 99.93% successes in rngtest FIPS140-2.
      
      Notably, though, when testing with dieharder it was noticed that
      we get 3 WEAK results over 114, which isn't optimal, and also
      the p-values distribution wasn't uniform in all the cases, so a
      conservative quality value was chosen by applying an arbitrary
      penalty to the calculated values.
      
      For reference, this is how the values were calculated:
      
      The dieharder results were averaged, then normalized (0-1000)
      and re-averaged with the rngtest result (where the result was
      given a score of 99.93% of 1000, so 999.3), then aggregated
      together and averaged again.
      An arbitrary penalty of -100 was applied due to the retrieved
      value, which brings us finally to 700.
      Signed-off-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      d2704808
    • Sohaib Mohamed's avatar
      tpm/st33zp24: drop unneeded over-commenting · f04510f2
      Sohaib Mohamed authored
      Remove parameter descriptions from all static functions.
      Remove the comment altogether that does not tell what the function does.
      Suggested-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarSohaib Mohamed <sohaib.amhmd@gmail.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      f04510f2
    • Chen Jun's avatar
      tpm: add request_locality before write TPM_INT_ENABLE · 0ef333f5
      Chen Jun authored
      Locality is not appropriately requested before writing the int mask.
      Add the missing boilerplate.
      
      Fixes: e6aef069 ("tpm_tis: convert to using locality callbacks")
      Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
      Reviewed-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      Signed-off-by: default avatarJarkko Sakkinen <jarkko@kernel.org>
      0ef333f5
  2. 28 Dec, 2021 3 commits
  3. 27 Dec, 2021 2 commits
  4. 26 Dec, 2021 4 commits
  5. 25 Dec, 2021 12 commits
  6. 24 Dec, 2021 3 commits
  7. 23 Dec, 2021 11 commits