]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/pkey: fix/harmonize internal keyblob headers
authorHolger Dengler <dengler@linux.ibm.com>
Wed, 26 Jul 2023 09:33:45 +0000 (11:33 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 19 Sep 2023 10:22:31 +0000 (12:22 +0200)
[ Upstream commit 37a08f010b7c423b5e4c9ed3b187d21166553007 ]

Commit 'fa6999e326fe ("s390/pkey: support CCA and EP11 secure ECC
private keys")' introduced PKEY_TYPE_EP11_AES as a supplement to
PKEY_TYPE_EP11. All pkeys have an internal header/payload structure,
which is opaque to the userspace. The header structures for
PKEY_TYPE_EP11 and PKEY_TYPE_EP11_AES are nearly identical and there
is no reason, why different structures are used. In preparation to fix
the keyversion handling in the broken PKEY IOCTLs, the same header
structure is used for PKEY_TYPE_EP11 and PKEY_TYPE_EP11_AES. This
reduces the number of different code paths and increases the
readability.

Fixes: fa6999e326fe ("s390/pkey: support CCA and EP11 secure ECC private keys")
Signed-off-by: Holger Dengler <dengler@linux.ibm.com>
Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/s390/crypto/pkey_api.c
drivers/s390/crypto/zcrypt_ep11misc.c
drivers/s390/crypto/zcrypt_ep11misc.h

index 83b335f962c890a5c0b1b0ad2a1d3ca52ce90fa3..34e1d1b339c122a73d1c20b01223d6face1b4868 100644 (file)
@@ -744,7 +744,7 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
                if (ktype)
                        *ktype = PKEY_TYPE_EP11;
                if (ksize)
-                       *ksize = kb->head.keybitlen;
+                       *ksize = kb->head.bitlen;
 
                rc = ep11_findcard2(&_apqns, &_nr_apqns, *cardnr, *domain,
                                    ZCRYPT_CEX7, EP11_API_V, kb->wkvp);
index 9ce5a71da69b822cfb8a59d3f4b8dce4c0233939..3daf259ba10e769c87a85e5ca245dfa7f0610340 100644 (file)
@@ -788,7 +788,7 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
        kb->head.type = TOKTYPE_NON_CCA;
        kb->head.len = rep_pl->data_len;
        kb->head.version = TOKVER_EP11_AES;
-       kb->head.keybitlen = keybitsize;
+       kb->head.bitlen = keybitsize;
 
 out:
        kfree(req);
@@ -1056,7 +1056,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
        kb->head.type = TOKTYPE_NON_CCA;
        kb->head.len = rep_pl->data_len;
        kb->head.version = TOKVER_EP11_AES;
-       kb->head.keybitlen = keybitsize;
+       kb->head.bitlen = keybitsize;
 
 out:
        kfree(req);
index 1e02b197c003522677ab6857265ce8915d41a342..d424fa901f1b0ce87b0a5d8713cd46a04eed5908 100644 (file)
@@ -29,14 +29,7 @@ struct ep11keyblob {
        union {
                u8 session[32];
                /* only used for PKEY_TYPE_EP11: */
-               struct {
-                       u8  type;      /* 0x00 (TOKTYPE_NON_CCA) */
-                       u8  res0;      /* unused */
-                       u16 len;       /* total length in bytes of this blob */
-                       u8  version;   /* 0x03 (TOKVER_EP11_AES) */
-                       u8  res1;      /* unused */
-                       u16 keybitlen; /* clear key bit len, 0 for unknown */
-               } head;
+               struct ep11kblob_header head;
        };
        u8  wkvp[16];  /* wrapping key verification pattern */
        u64 attr;      /* boolean key attributes */