Commit 183cb469 authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Vasily Gorbik

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: default avatarHarald Freudenberger <freude@linux.ibm.com>
Reviewed-by: default avatarIngo Franzki <ifranzki@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 22a33c7e
...@@ -2,7 +2,7 @@ ...@@ -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 @@ ...@@ -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); ...@@ -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 @@ ...@@ -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 { ...@@ -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, ...@@ -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, ...@@ -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 @@ int pkey_verifykey(const struct pkey_seckey *seckey, ...@@ -201,12 +199,11 @@ int pkey_verifykey(const struct pkey_seckey *seckey,
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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment