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
|
* Kernelspace interface to the pkey device driver
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2016
|
* Copyright IBM Corp. 2016,2019
|
||||||
*
|
*
|
||||||
* Author: Harald Freudenberger <freude@de.ibm.com>
|
* Author: Harald Freudenberger <freude@de.ibm.com>
|
||||||
*
|
*
|
||||||
@ -15,116 +15,6 @@
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <uapi/asm/pkey.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.
|
* In-kernel API: Transform an key blob (of any type) into a protected key.
|
||||||
* @param key pointer to a buffer containing the key blob
|
* @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
|
* @param protkey pointer to buffer receiving the protected key
|
||||||
* @return 0 on success, negative errno value on failure
|
* @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);
|
struct pkey_protkey *protkey);
|
||||||
|
|
||||||
#endif /* _KAPI_PKEY_H */
|
#endif /* _KAPI_PKEY_H */
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* pkey device driver
|
* pkey device driver
|
||||||
*
|
*
|
||||||
* Copyright IBM Corp. 2017
|
* Copyright IBM Corp. 2017,2019
|
||||||
* Author(s): Harald Freudenberger
|
* Author(s): Harald Freudenberger
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ struct protaeskeytoken {
|
|||||||
/*
|
/*
|
||||||
* Create a protected key from a clear key value.
|
* Create a protected key from a clear key value.
|
||||||
*/
|
*/
|
||||||
int pkey_clr2protkey(u32 keytype,
|
static int pkey_clr2protkey(u32 keytype,
|
||||||
const struct pkey_clrkey *clrkey,
|
const struct pkey_clrkey *clrkey,
|
||||||
struct pkey_protkey *protkey)
|
struct pkey_protkey *protkey)
|
||||||
{
|
{
|
||||||
@ -122,12 +122,11 @@ int pkey_clr2protkey(u32 keytype,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pkey_clr2protkey);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find card and transform secure key into protected key.
|
* Find card and transform secure key into protected key.
|
||||||
*/
|
*/
|
||||||
int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
static int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
||||||
struct pkey_protkey *pkey)
|
struct pkey_protkey *pkey)
|
||||||
{
|
{
|
||||||
u16 cardnr, domain;
|
u16 cardnr, domain;
|
||||||
@ -157,12 +156,11 @@ int pkey_skey2pkey(const struct pkey_seckey *seckey,
|
|||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pkey_skey2pkey);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Verify key and give back some info about the key.
|
* Verify key and give back some info about the key.
|
||||||
*/
|
*/
|
||||||
int pkey_verifykey(const struct pkey_seckey *seckey,
|
static int pkey_verifykey(const struct pkey_seckey *seckey,
|
||||||
u16 *pcardnr, u16 *pdomain,
|
u16 *pcardnr, u16 *pdomain,
|
||||||
u16 *pkeysize, u32 *pattributes)
|
u16 *pkeysize, u32 *pattributes)
|
||||||
{
|
{
|
||||||
@ -201,12 +199,11 @@ out:
|
|||||||
DEBUG_DBG("%s rc=%d\n", __func__, rc);
|
DEBUG_DBG("%s rc=%d\n", __func__, rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pkey_verifykey);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generate a random protected key
|
* 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;
|
struct pkey_clrkey clrkey;
|
||||||
int keysize;
|
int keysize;
|
||||||
@ -241,12 +238,11 @@ int pkey_genprotkey(__u32 keytype, struct pkey_protkey *protkey)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pkey_genprotkey);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Verify if a protected key is still valid
|
* 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;
|
unsigned long fc;
|
||||||
struct {
|
struct {
|
||||||
@ -287,12 +283,11 @@ int pkey_verifyprotkey(const struct pkey_protkey *protkey)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pkey_verifyprotkey);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Transform a non-CCA key token into a protected key
|
* 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 pkey_protkey *protkey)
|
||||||
{
|
{
|
||||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
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
|
* 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 pkey_protkey *protkey)
|
||||||
{
|
{
|
||||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
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
|
* 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 pkey_protkey *protkey)
|
||||||
{
|
{
|
||||||
struct keytoken_header *hdr = (struct keytoken_header *)key;
|
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: {
|
case PKEY_KBLOB2PROTK: {
|
||||||
struct pkey_kblob2pkey __user *utp = (void __user *) arg;
|
struct pkey_kblob2pkey __user *utp = (void __user *) arg;
|
||||||
struct pkey_kblob2pkey ktp;
|
struct pkey_kblob2pkey ktp;
|
||||||
__u8 __user *ukey;
|
u8 __user *ukey;
|
||||||
__u8 *kkey;
|
u8 *kkey;
|
||||||
|
|
||||||
if (copy_from_user(&ktp, utp, sizeof(ktp)))
|
if (copy_from_user(&ktp, utp, sizeof(ktp)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user