s390/pkey: pkey cleanup: narrow in-kernel API, fix some variable types
There are a lot of pkey functions exported as in-kernel callable API functions but not used at all. This patch narrows down the pkey in-kernel API to what is currently only used and exploited. Within the kernel just use u32 without any leading __u32. Also functions declared in a header file in arch/s390/include/asm don't need a comment 'In-kernel API', this is by definition, otherwise the header file would be in arch/s390/include/uapi/asm. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
22a33c7e4e
commit
183cb46954
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* Kernelspace interface to the pkey device driver
|
||||
*
|
||||
* Copyright IBM Corp. 2016
|
||||
* Copyright IBM Corp. 2016,2019
|
||||
*
|
||||
* Author: Harald Freudenberger <freude@de.ibm.com>
|
||||
*
|
||||
@ -15,116 +15,6 @@
|
||||
#include <linux/types.h>
|
||||
#include <uapi/asm/pkey.h>
|
||||
|
||||
/*
|
||||
* Generate (AES) random secure key.
|
||||
* @param cardnr may be -1 (use default card)
|
||||
* @param domain may be -1 (use default domain)
|
||||
* @param keytype one of the PKEY_KEYTYPE values
|
||||
* @param seckey pointer to buffer receiving the secure key
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_genseckey(__u16 cardnr, __u16 domain,
|
||||
__u32 keytype, struct pkey_seckey *seckey);
|
||||
|
||||
/*
|
||||
* Generate (AES) secure key with given key value.
|
||||
* @param cardnr may be -1 (use default card)
|
||||
* @param domain may be -1 (use default domain)
|
||||
* @param keytype one of the PKEY_KEYTYPE values
|
||||
* @param clrkey pointer to buffer with clear key data
|
||||
* @param seckey pointer to buffer receiving the secure key
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_clr2seckey(__u16 cardnr, __u16 domain, __u32 keytype,
|
||||
const struct pkey_clrkey *clrkey,
|
||||
struct pkey_seckey *seckey);
|
||||
|
||||
/*
|
||||
* Derive (AES) proteced key from the (AES) secure key blob.
|
||||
* @param cardnr may be -1 (use default card)
|
||||
* @param domain may be -1 (use default domain)
|
||||
* @param seckey pointer to buffer with the input secure key
|
||||
* @param protkey pointer to buffer receiving the protected key and
|
||||
* additional info (type, length)
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_sec2protkey(__u16 cardnr, __u16 domain,
|
||||
const struct pkey_seckey *seckey,
|
||||
struct pkey_protkey *protkey);
|
||||
|
||||
/*
|
||||
* Derive (AES) protected key from a given clear key value.
|
||||
* @param keytype one of the PKEY_KEYTYPE values
|
||||
* @param clrkey pointer to buffer with clear key data
|
||||
* @param protkey pointer to buffer receiving the protected key and
|
||||
* additional info (type, length)
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_clr2protkey(__u32 keytype,
|
||||
const struct pkey_clrkey *clrkey,
|
||||
struct pkey_protkey *protkey);
|
||||
|
||||
/*
|
||||
* Search for a matching crypto card based on the Master Key
|
||||
* Verification Pattern provided inside a secure key.
|
||||
* @param seckey pointer to buffer with the input secure key
|
||||
* @param cardnr pointer to cardnr, receives the card number on success
|
||||
* @param domain pointer to domain, receives the domain number on success
|
||||
* @param verify if set, always verify by fetching verification pattern
|
||||
* from card
|
||||
* @return 0 on success, negative errno value on failure. If no card could be
|
||||
* found, -ENODEV is returned.
|
||||
*/
|
||||
int pkey_findcard(const struct pkey_seckey *seckey,
|
||||
__u16 *cardnr, __u16 *domain, int verify);
|
||||
|
||||
/*
|
||||
* Find card and transform secure key to protected key.
|
||||
* @param seckey pointer to buffer with the input secure key
|
||||
* @param protkey pointer to buffer receiving the protected key and
|
||||
* additional info (type, length)
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
||||
struct pkey_protkey *protkey);
|
||||
|
||||
/*
|
||||
* Verify the given secure key for being able to be useable with
|
||||
* the pkey module. Check for correct key type and check for having at
|
||||
* least one crypto card being able to handle this key (master key
|
||||
* or old master key verification pattern matches).
|
||||
* Return some info about the key: keysize in bits, keytype (currently
|
||||
* only AES), flag if key is wrapped with an old MKVP.
|
||||
* @param seckey pointer to buffer with the input secure key
|
||||
* @param pcardnr pointer to cardnr, receives the card number on success
|
||||
* @param pdomain pointer to domain, receives the domain number on success
|
||||
* @param pkeysize pointer to keysize, receives the bitsize of the key
|
||||
* @param pattributes pointer to attributes, receives additional info
|
||||
* PKEY_VERIFY_ATTR_AES if the key is an AES key
|
||||
* PKEY_VERIFY_ATTR_OLD_MKVP if key has old mkvp stored in
|
||||
* @return 0 on success, negative errno value on failure. If no card could
|
||||
* be found which is able to handle this key, -ENODEV is returned.
|
||||
*/
|
||||
int pkey_verifykey(const struct pkey_seckey *seckey,
|
||||
u16 *pcardnr, u16 *pdomain,
|
||||
u16 *pkeysize, u32 *pattributes);
|
||||
|
||||
/*
|
||||
* In-kernel API: Generate (AES) random protected key.
|
||||
* @param keytype one of the PKEY_KEYTYPE values
|
||||
* @param protkey pointer to buffer receiving the protected key
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_genprotkey(__u32 keytype, struct pkey_protkey *protkey);
|
||||
|
||||
/*
|
||||
* In-kernel API: Verify an (AES) protected key.
|
||||
* @param protkey pointer to buffer containing the protected key to verify
|
||||
* @return 0 on success, negative errno value on failure. In case the protected
|
||||
* key is not valid -EKEYREJECTED is returned
|
||||
*/
|
||||
int pkey_verifyprotkey(const struct pkey_protkey *protkey);
|
||||
|
||||
/*
|
||||
* In-kernel API: Transform an key blob (of any type) into a protected key.
|
||||
* @param key pointer to a buffer containing the key blob
|
||||
@ -132,7 +22,7 @@ int pkey_verifyprotkey(const struct pkey_protkey *protkey);
|
||||
* @param protkey pointer to buffer receiving the protected key
|
||||
* @return 0 on success, negative errno value on failure
|
||||
*/
|
||||
int pkey_keyblob2pkey(const __u8 *key, __u32 keylen,
|
||||
int pkey_keyblob2pkey(const u8 *key, u32 keylen,
|
||||
struct pkey_protkey *protkey);
|
||||
|
||||
#endif /* _KAPI_PKEY_H */
|
||||
|
@ -2,7 +2,7 @@
|
||||
/*
|
||||
* pkey device driver
|
||||
*
|
||||
* Copyright IBM Corp. 2017
|
||||
* Copyright IBM Corp. 2017,2019
|
||||
* Author(s): Harald Freudenberger
|
||||
*/
|
||||
|
||||
@ -71,9 +71,9 @@ struct protaeskeytoken {
|
||||
/*
|
||||
* Create a protected key from a clear key value.
|
||||
*/
|
||||
int pkey_clr2protkey(u32 keytype,
|
||||
const struct pkey_clrkey *clrkey,
|
||||
struct pkey_protkey *protkey)
|
||||
static int pkey_clr2protkey(u32 keytype,
|
||||
const struct pkey_clrkey *clrkey,
|
||||
struct pkey_protkey *protkey)
|
||||
{
|
||||
long fc;
|
||||
int keysize;
|
||||
@ -122,13 +122,12 @@ int pkey_clr2protkey(u32 keytype,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_clr2protkey);
|
||||
|
||||
/*
|
||||
* Find card and transform secure key into protected key.
|
||||
*/
|
||||
int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
||||
struct pkey_protkey *pkey)
|
||||
static int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
||||
struct pkey_protkey *pkey)
|
||||
{
|
||||
u16 cardnr, domain;
|
||||
int rc, verify;
|
||||
@ -157,14 +156,13 @@ int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_skey2pkey);
|
||||
|
||||
/*
|
||||
* Verify key and give back some info about the key.
|
||||
*/
|
||||
int pkey_verifykey(const struct pkey_seckey *seckey,
|
||||
u16 *pcardnr, u16 *pdomain,
|
||||
u16 *pkeysize, u32 *pattributes)
|
||||
static int pkey_verifykey(const struct pkey_seckey *seckey,
|
||||
u16 *pcardnr, u16 *pdomain,
|
||||
u16 *pkeysize, u32 *pattributes)
|
||||
{
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *) seckey;
|
||||
u16 cardnr, domain;
|
||||
@ -201,12 +199,11 @@ out:
|
||||
DEBUG_DBG("%s rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_verifykey);
|
||||
|
||||
/*
|
||||
* Generate a random protected key
|
||||
*/
|
||||
int pkey_genprotkey(__u32 keytype, struct pkey_protkey *protkey)
|
||||
static int pkey_genprotkey(u32 keytype, struct pkey_protkey *protkey)
|
||||
{
|
||||
struct pkey_clrkey clrkey;
|
||||
int keysize;
|
||||
@ -241,12 +238,11 @@ int pkey_genprotkey(__u32 keytype, struct pkey_protkey *protkey)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_genprotkey);
|
||||
|
||||
/*
|
||||
* Verify if a protected key is still valid
|
||||
*/
|
||||
int pkey_verifyprotkey(const struct pkey_protkey *protkey)
|
||||
static int pkey_verifyprotkey(const struct pkey_protkey *protkey)
|
||||
{
|
||||
unsigned long fc;
|
||||
struct {
|
||||
@ -287,12 +283,11 @@ int pkey_verifyprotkey(const struct pkey_protkey *protkey)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_verifyprotkey);
|
||||
|
||||
/*
|
||||
* Transform a non-CCA key token into a protected key
|
||||
*/
|
||||
static int pkey_nonccatok2pkey(const __u8 *key, __u32 keylen,
|
||||
static int pkey_nonccatok2pkey(const u8 *key, u32 keylen,
|
||||
struct pkey_protkey *protkey)
|
||||
{
|
||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
||||
@ -320,7 +315,7 @@ static int pkey_nonccatok2pkey(const __u8 *key, __u32 keylen,
|
||||
/*
|
||||
* Transform a CCA internal key token into a protected key
|
||||
*/
|
||||
static int pkey_ccainttok2pkey(const __u8 *key, __u32 keylen,
|
||||
static int pkey_ccainttok2pkey(const u8 *key, u32 keylen,
|
||||
struct pkey_protkey *protkey)
|
||||
{
|
||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
||||
@ -342,7 +337,7 @@ static int pkey_ccainttok2pkey(const __u8 *key, __u32 keylen,
|
||||
/*
|
||||
* Transform a key blob (of any type) into a protected key
|
||||
*/
|
||||
int pkey_keyblob2pkey(const __u8 *key, __u32 keylen,
|
||||
int pkey_keyblob2pkey(const u8 *key, u32 keylen,
|
||||
struct pkey_protkey *protkey)
|
||||
{
|
||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
||||
@ -507,8 +502,8 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
case PKEY_KBLOB2PROTK: {
|
||||
struct pkey_kblob2pkey __user *utp = (void __user *) arg;
|
||||
struct pkey_kblob2pkey ktp;
|
||||
__u8 __user *ukey;
|
||||
__u8 *kkey;
|
||||
u8 __user *ukey;
|
||||
u8 *kkey;
|
||||
|
||||
if (copy_from_user(&ktp, utp, sizeof(ktp)))
|
||||
return -EFAULT;
|
||||
|
Loading…
Reference in New Issue
Block a user