mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
s390/zcrypt: code cleanup
This patch tries to fix as much as possible of the checkpatch.pl --strict findings: CHECK: Logical continuations should be on the previous line CHECK: No space is necessary after a cast CHECK: Alignment should match open parenthesis CHECK: 'useable' may be misspelled - perhaps 'usable'? WARNING: Possible repeated word: 'is' CHECK: spaces preferred around that '*' (ctx:VxV) CHECK: Comparison to NULL could be written "!msg" CHECK: Prefer kzalloc(sizeof(*zc)...) over kzalloc(sizeof(struct...)...) CHECK: Unnecessary parentheses around resp_type->work CHECK: Avoid CamelCase: <xcRB> There is no functional change comming with this patch, only code cleanup, renaming, whitespaces, indenting, ... but no semantic change in any way. Also the API (zcrypt and pkey header file) is semantically unchanged. Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Reviewed-by: Jürgen Christ <jchrist@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
6acb086d9f
commit
2004b57cde
@ -171,7 +171,7 @@ struct pkey_skey2pkey {
|
||||
#define PKEY_SKEY2PKEY _IOWR(PKEY_IOCTL_MAGIC, 0x06, struct pkey_skey2pkey)
|
||||
|
||||
/*
|
||||
* Verify the given CCA AES secure key for being able to be useable with
|
||||
* Verify the given CCA AES secure key for being able to be usable 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).
|
||||
|
@ -236,8 +236,8 @@ struct zcrypt_device_matrix_ext {
|
||||
};
|
||||
|
||||
#define AUTOSELECT 0xFFFFFFFF
|
||||
#define AUTOSEL_AP ((__u16) 0xFFFF)
|
||||
#define AUTOSEL_DOM ((__u16) 0xFFFF)
|
||||
#define AUTOSEL_AP ((__u16)0xFFFF)
|
||||
#define AUTOSEL_DOM ((__u16)0xFFFF)
|
||||
|
||||
#define ZCRYPT_IOCTL_MAGIC 'z'
|
||||
|
||||
@ -303,12 +303,12 @@ struct zcrypt_device_matrix_ext {
|
||||
/**
|
||||
* Supported ioctl calls
|
||||
*/
|
||||
#define ICARSAMODEXPO _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x05, 0)
|
||||
#define ICARSACRT _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x06, 0)
|
||||
#define ZSECSENDCPRB _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x81, 0)
|
||||
#define ZSENDEP11CPRB _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x04, 0)
|
||||
#define ICARSAMODEXPO _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x05, 0)
|
||||
#define ICARSACRT _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x06, 0)
|
||||
#define ZSECSENDCPRB _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x81, 0)
|
||||
#define ZSENDEP11CPRB _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x04, 0)
|
||||
|
||||
#define ZCRYPT_DEVICE_STATUS _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x5f, 0)
|
||||
#define ZCRYPT_DEVICE_STATUS _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x5f, 0)
|
||||
#define ZCRYPT_STATUS_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x58, char[MAX_ZDEV_CARDIDS_EXT])
|
||||
#define ZCRYPT_QDEPTH_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x59, char[MAX_ZDEV_CARDIDS_EXT])
|
||||
#define ZCRYPT_PERDEV_REQCNT _IOR(ZCRYPT_IOCTL_MAGIC, 0x5a, int[MAX_ZDEV_CARDIDS_EXT])
|
||||
@ -350,7 +350,7 @@ struct zcrypt_device_matrix {
|
||||
};
|
||||
|
||||
/* Deprecated: use ZCRYPT_DEVICE_STATUS */
|
||||
#define ZDEVICESTATUS _IOC(_IOC_READ|_IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x4f, 0)
|
||||
#define ZDEVICESTATUS _IOC(_IOC_READ | _IOC_WRITE, ZCRYPT_IOCTL_MAGIC, 0x4f, 0)
|
||||
/* Deprecated: use ZCRYPT_STATUS_MASK */
|
||||
#define Z90STAT_STATUS_MASK _IOR(ZCRYPT_IOCTL_MAGIC, 0x48, char[64])
|
||||
/* Deprecated: use ZCRYPT_QDEPTH_MASK */
|
||||
|
@ -179,7 +179,7 @@ static int ap_qci_available(void)
|
||||
* ap_apft_available(): Test if AP facilities test (APFT)
|
||||
* facility is available.
|
||||
*
|
||||
* Returns 1 if APFT is is available.
|
||||
* Returns 1 if APFT is available.
|
||||
*/
|
||||
static int ap_apft_available(void)
|
||||
{
|
||||
@ -722,7 +722,7 @@ struct __ap_calc_ctrs {
|
||||
|
||||
static int __ap_calc_helper(struct device *dev, void *arg)
|
||||
{
|
||||
struct __ap_calc_ctrs *pctrs = (struct __ap_calc_ctrs *) arg;
|
||||
struct __ap_calc_ctrs *pctrs = (struct __ap_calc_ctrs *)arg;
|
||||
|
||||
if (is_queue_dev(dev)) {
|
||||
pctrs->apqns++;
|
||||
@ -738,7 +738,7 @@ static void ap_calc_bound_apqns(unsigned int *apqns, unsigned int *bound)
|
||||
struct __ap_calc_ctrs ctrs;
|
||||
|
||||
memset(&ctrs, 0, sizeof(ctrs));
|
||||
bus_for_each_dev(&ap_bus_type, NULL, (void *) &ctrs, __ap_calc_helper);
|
||||
bus_for_each_dev(&ap_bus_type, NULL, (void *)&ctrs, __ap_calc_helper);
|
||||
|
||||
*apqns = ctrs.apqns;
|
||||
*bound = ctrs.bound;
|
||||
@ -799,7 +799,7 @@ EXPORT_SYMBOL(ap_wait_init_apqn_bindings_complete);
|
||||
static int __ap_queue_devices_with_id_unregister(struct device *dev, void *data)
|
||||
{
|
||||
if (is_queue_dev(dev) &&
|
||||
AP_QID_CARD(to_ap_queue(dev)->qid) == (int)(long) data)
|
||||
AP_QID_CARD(to_ap_queue(dev)->qid) == (int)(long)data)
|
||||
device_unregister(dev);
|
||||
return 0;
|
||||
}
|
||||
@ -812,8 +812,8 @@ static int __ap_revise_reserved(struct device *dev, void *dummy)
|
||||
card = AP_QID_CARD(to_ap_queue(dev)->qid);
|
||||
queue = AP_QID_QUEUE(to_ap_queue(dev)->qid);
|
||||
mutex_lock(&ap_perms_mutex);
|
||||
devres = test_bit_inv(card, ap_perms.apm)
|
||||
&& test_bit_inv(queue, ap_perms.aqm);
|
||||
devres = test_bit_inv(card, ap_perms.apm) &&
|
||||
test_bit_inv(queue, ap_perms.aqm);
|
||||
mutex_unlock(&ap_perms_mutex);
|
||||
drvres = to_ap_drv(dev->driver)->flags
|
||||
& AP_DRIVER_FLAG_DEFAULT;
|
||||
@ -844,8 +844,8 @@ int ap_owned_by_def_drv(int card, int queue)
|
||||
|
||||
mutex_lock(&ap_perms_mutex);
|
||||
|
||||
if (test_bit_inv(card, ap_perms.apm)
|
||||
&& test_bit_inv(queue, ap_perms.aqm))
|
||||
if (test_bit_inv(card, ap_perms.apm) &&
|
||||
test_bit_inv(queue, ap_perms.aqm))
|
||||
rc = 1;
|
||||
|
||||
mutex_unlock(&ap_perms_mutex);
|
||||
@ -894,8 +894,8 @@ static int ap_device_probe(struct device *dev)
|
||||
card = AP_QID_CARD(to_ap_queue(dev)->qid);
|
||||
queue = AP_QID_QUEUE(to_ap_queue(dev)->qid);
|
||||
mutex_lock(&ap_perms_mutex);
|
||||
devres = test_bit_inv(card, ap_perms.apm)
|
||||
&& test_bit_inv(queue, ap_perms.aqm);
|
||||
devres = test_bit_inv(card, ap_perms.apm) &&
|
||||
test_bit_inv(queue, ap_perms.aqm);
|
||||
mutex_unlock(&ap_perms_mutex);
|
||||
drvres = ap_drv->flags & AP_DRIVER_FLAG_DEFAULT;
|
||||
if (!!devres != !!drvres)
|
||||
@ -916,8 +916,9 @@ static int ap_device_probe(struct device *dev)
|
||||
if (is_queue_dev(dev))
|
||||
hash_del(&to_ap_queue(dev)->hnode);
|
||||
spin_unlock_bh(&ap_queues_lock);
|
||||
} else
|
||||
} else {
|
||||
ap_check_bindings_complete();
|
||||
}
|
||||
|
||||
out:
|
||||
if (rc)
|
||||
@ -998,8 +999,8 @@ void ap_bus_force_rescan(void)
|
||||
EXPORT_SYMBOL(ap_bus_force_rescan);
|
||||
|
||||
/*
|
||||
* A config change has happened, force an ap bus rescan.
|
||||
*/
|
||||
* A config change has happened, force an ap bus rescan.
|
||||
*/
|
||||
void ap_bus_cfg_chg(void)
|
||||
{
|
||||
AP_DBF_DBG("%s config change, forcing bus rescan\n", __func__);
|
||||
@ -1123,7 +1124,7 @@ int ap_parse_mask_str(const char *str,
|
||||
if (bits & 0x07)
|
||||
return -EINVAL;
|
||||
|
||||
size = BITS_TO_LONGS(bits)*sizeof(unsigned long);
|
||||
size = BITS_TO_LONGS(bits) * sizeof(unsigned long);
|
||||
newmap = kmalloc(size, GFP_KERNEL);
|
||||
if (!newmap)
|
||||
return -ENOMEM;
|
||||
@ -1259,8 +1260,9 @@ static ssize_t poll_thread_store(struct bus_type *bus,
|
||||
rc = ap_poll_thread_start();
|
||||
if (rc)
|
||||
count = rc;
|
||||
} else
|
||||
} else {
|
||||
ap_poll_thread_stop();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -1633,9 +1635,9 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
|
||||
apinfo.mode = (func >> 26) & 0x07;
|
||||
apinfo.cat = AP_DEVICE_TYPE_CEX8;
|
||||
status = ap_qact(qid, 0, &apinfo);
|
||||
if (status.response_code == AP_RESPONSE_NORMAL
|
||||
&& apinfo.cat >= AP_DEVICE_TYPE_CEX2A
|
||||
&& apinfo.cat <= AP_DEVICE_TYPE_CEX8)
|
||||
if (status.response_code == AP_RESPONSE_NORMAL &&
|
||||
apinfo.cat >= AP_DEVICE_TYPE_CEX2A &&
|
||||
apinfo.cat <= AP_DEVICE_TYPE_CEX8)
|
||||
comp_type = apinfo.cat;
|
||||
}
|
||||
if (!comp_type)
|
||||
@ -1655,7 +1657,7 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
|
||||
*/
|
||||
static int __match_card_device_with_id(struct device *dev, const void *data)
|
||||
{
|
||||
return is_card_dev(dev) && to_ap_card(dev)->id == (int)(long)(void *) data;
|
||||
return is_card_dev(dev) && to_ap_card(dev)->id == (int)(long)(void *)data;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1664,7 +1666,7 @@ static int __match_card_device_with_id(struct device *dev, const void *data)
|
||||
*/
|
||||
static int __match_queue_device_with_qid(struct device *dev, const void *data)
|
||||
{
|
||||
return is_queue_dev(dev) && to_ap_queue(dev)->qid == (int)(long) data;
|
||||
return is_queue_dev(dev) && to_ap_queue(dev)->qid == (int)(long)data;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1673,8 +1675,8 @@ static int __match_queue_device_with_qid(struct device *dev, const void *data)
|
||||
*/
|
||||
static int __match_queue_device_with_queue_id(struct device *dev, const void *data)
|
||||
{
|
||||
return is_queue_dev(dev)
|
||||
&& AP_QID_QUEUE(to_ap_queue(dev)->qid) == (int)(long) data;
|
||||
return is_queue_dev(dev) &&
|
||||
AP_QID_QUEUE(to_ap_queue(dev)->qid) == (int)(long)data;
|
||||
}
|
||||
|
||||
/* Helper function for notify_config_changed */
|
||||
@ -1727,7 +1729,7 @@ static inline void notify_scan_complete(void)
|
||||
static inline void ap_scan_rm_card_dev_and_queue_devs(struct ap_card *ac)
|
||||
{
|
||||
bus_for_each_dev(&ap_bus_type, NULL,
|
||||
(void *)(long) ac->id,
|
||||
(void *)(long)ac->id,
|
||||
__ap_queue_devices_with_id_unregister);
|
||||
device_unregister(&ac->ap_dev.device);
|
||||
}
|
||||
@ -1755,7 +1757,7 @@ static inline void ap_scan_domains(struct ap_card *ac)
|
||||
for (dom = 0; dom <= ap_max_domain_id; dom++) {
|
||||
qid = AP_MKQID(ac->id, dom);
|
||||
dev = bus_find_device(&ap_bus_type, NULL,
|
||||
(void *)(long) qid,
|
||||
(void *)(long)qid,
|
||||
__match_queue_device_with_qid);
|
||||
aq = dev ? to_ap_queue(dev) : NULL;
|
||||
if (!ap_test_config_usage_domain(dom)) {
|
||||
@ -1901,7 +1903,7 @@ static inline void ap_scan_adapter(int ap)
|
||||
|
||||
/* Is there currently a card device for this adapter ? */
|
||||
dev = bus_find_device(&ap_bus_type, NULL,
|
||||
(void *)(long) ap,
|
||||
(void *)(long)ap,
|
||||
__match_card_device_with_id);
|
||||
ac = dev ? to_ap_card(dev) : NULL;
|
||||
|
||||
@ -2102,7 +2104,7 @@ static void ap_scan_bus(struct work_struct *unused)
|
||||
if (ap_domain_index >= 0) {
|
||||
struct device *dev =
|
||||
bus_find_device(&ap_bus_type, NULL,
|
||||
(void *)(long) ap_domain_index,
|
||||
(void *)(long)ap_domain_index,
|
||||
__match_queue_device_with_queue_id);
|
||||
if (dev)
|
||||
put_device(dev);
|
||||
@ -2137,7 +2139,7 @@ static int __init ap_debug_init(void)
|
||||
|
||||
static void __init ap_perms_init(void)
|
||||
{
|
||||
/* all resources useable if no kernel parameter string given */
|
||||
/* all resources usable if no kernel parameter string given */
|
||||
memset(&ap_perms.ioctlm, 0xFF, sizeof(ap_perms.ioctlm));
|
||||
memset(&ap_perms.apm, 0xFF, sizeof(ap_perms.apm));
|
||||
memset(&ap_perms.aqm, 0xFF, sizeof(ap_perms.aqm));
|
||||
|
@ -317,6 +317,7 @@ struct ap_perms {
|
||||
unsigned long aqm[BITS_TO_LONGS(AP_DOMAINS)];
|
||||
unsigned long adm[BITS_TO_LONGS(AP_DOMAINS)];
|
||||
};
|
||||
|
||||
extern struct ap_perms ap_perms;
|
||||
extern struct mutex ap_perms_mutex;
|
||||
|
||||
|
@ -99,7 +99,7 @@ int ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length)
|
||||
{
|
||||
struct ap_queue_status status;
|
||||
|
||||
if (msg == NULL)
|
||||
if (!msg)
|
||||
return -EINVAL;
|
||||
status = ap_dqap(qid, psmid, msg, length, NULL, NULL);
|
||||
switch (status.response_code) {
|
||||
@ -603,7 +603,7 @@ static ssize_t interrupt_show(struct device *dev,
|
||||
static DEVICE_ATTR_RO(interrupt);
|
||||
|
||||
static ssize_t config_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct ap_queue *aq = to_ap_queue(dev);
|
||||
int rc;
|
||||
@ -827,8 +827,9 @@ int ap_queue_message(struct ap_queue *aq, struct ap_message *ap_msg)
|
||||
aq->requestq_count++;
|
||||
aq->total_request_count++;
|
||||
atomic64_inc(&aq->card->total_request_count);
|
||||
} else
|
||||
} else {
|
||||
rc = -ENODEV;
|
||||
}
|
||||
|
||||
/* Send/receive as many request from the queue as possible. */
|
||||
ap_wait(ap_sm_event_loop(aq, AP_SM_EVENT_POLL));
|
||||
|
@ -232,7 +232,7 @@ static int pkey_ep11key2pkey(const u8 *key, struct pkey_protkey *pkey)
|
||||
int i, rc;
|
||||
u16 card, dom;
|
||||
u32 nr_apqns, *apqns = NULL;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
zcrypt_wait_api_operational();
|
||||
|
||||
@ -267,12 +267,12 @@ static int pkey_verifykey(const struct pkey_seckey *seckey,
|
||||
u16 *pcardnr, u16 *pdomain,
|
||||
u16 *pkeysize, u32 *pattributes)
|
||||
{
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *) seckey;
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *)seckey;
|
||||
u16 cardnr, domain;
|
||||
int rc;
|
||||
|
||||
/* check the secure key for valid AES secure key */
|
||||
rc = cca_check_secaeskeytoken(debug_info, 3, (u8 *) seckey, 0);
|
||||
rc = cca_check_secaeskeytoken(debug_info, 3, (u8 *)seckey, 0);
|
||||
if (rc)
|
||||
goto out;
|
||||
if (pattributes)
|
||||
@ -425,9 +425,9 @@ static int pkey_nonccatok2pkey(const u8 *key, u32 keylen,
|
||||
t = (struct clearaeskeytoken *)key;
|
||||
if (keylen != sizeof(*t) + t->len)
|
||||
goto out;
|
||||
if ((t->keytype == PKEY_KEYTYPE_AES_128 && t->len == 16)
|
||||
|| (t->keytype == PKEY_KEYTYPE_AES_192 && t->len == 24)
|
||||
|| (t->keytype == PKEY_KEYTYPE_AES_256 && t->len == 32))
|
||||
if ((t->keytype == PKEY_KEYTYPE_AES_128 && t->len == 16) ||
|
||||
(t->keytype == PKEY_KEYTYPE_AES_192 && t->len == 24) ||
|
||||
(t->keytype == PKEY_KEYTYPE_AES_256 && t->len == 32))
|
||||
memcpy(ckey.clrkey, t->clearkey, t->len);
|
||||
else
|
||||
goto out;
|
||||
@ -541,7 +541,6 @@ int pkey_keyblob2pkey(const u8 *key, u32 keylen,
|
||||
|
||||
DEBUG_DBG("%s rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(pkey_keyblob2pkey);
|
||||
|
||||
@ -588,9 +587,11 @@ static int pkey_genseckey2(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
} else if (ktype == PKEY_TYPE_CCA_DATA) {
|
||||
rc = cca_genseckey(card, dom, ksize, keybuf);
|
||||
*keybufsize = (rc ? 0 : SECKEYBLOBSIZE);
|
||||
} else /* TOKVER_CCA_VLSC */
|
||||
} else {
|
||||
/* TOKVER_CCA_VLSC */
|
||||
rc = cca_gencipherkey(card, dom, ksize, kflags,
|
||||
keybuf, keybufsize);
|
||||
}
|
||||
if (rc == 0)
|
||||
break;
|
||||
}
|
||||
@ -645,9 +646,11 @@ static int pkey_clr2seckey2(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
rc = cca_clr2seckey(card, dom, ksize,
|
||||
clrkey, keybuf);
|
||||
*keybufsize = (rc ? 0 : SECKEYBLOBSIZE);
|
||||
} else /* TOKVER_CCA_VLSC */
|
||||
} else {
|
||||
/* TOKVER_CCA_VLSC */
|
||||
rc = cca_clr2cipherkey(card, dom, ksize, kflags,
|
||||
clrkey, keybuf, keybufsize);
|
||||
}
|
||||
if (rc == 0)
|
||||
break;
|
||||
}
|
||||
@ -667,8 +670,8 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
|
||||
if (keylen < sizeof(struct keytoken_header))
|
||||
return -EINVAL;
|
||||
|
||||
if (hdr->type == TOKTYPE_CCA_INTERNAL
|
||||
&& hdr->version == TOKVER_CCA_AES) {
|
||||
if (hdr->type == TOKTYPE_CCA_INTERNAL &&
|
||||
hdr->version == TOKVER_CCA_AES) {
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *)key;
|
||||
|
||||
rc = cca_check_secaeskeytoken(debug_info, 3, key, 0);
|
||||
@ -677,7 +680,7 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
|
||||
if (ktype)
|
||||
*ktype = PKEY_TYPE_CCA_DATA;
|
||||
if (ksize)
|
||||
*ksize = (enum pkey_key_size) t->bitsize;
|
||||
*ksize = (enum pkey_key_size)t->bitsize;
|
||||
|
||||
rc = cca_findcard2(&_apqns, &_nr_apqns, *cardnr, *domain,
|
||||
ZCRYPT_CEX3C, AES_MK_SET, t->mkvp, 0, 1);
|
||||
@ -697,8 +700,8 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
|
||||
*cardnr = ((struct pkey_apqn *)_apqns)->card;
|
||||
*domain = ((struct pkey_apqn *)_apqns)->domain;
|
||||
|
||||
} else if (hdr->type == TOKTYPE_CCA_INTERNAL
|
||||
&& hdr->version == TOKVER_CCA_VLSC) {
|
||||
} else if (hdr->type == TOKTYPE_CCA_INTERNAL &&
|
||||
hdr->version == TOKVER_CCA_VLSC) {
|
||||
struct cipherkeytoken *t = (struct cipherkeytoken *)key;
|
||||
|
||||
rc = cca_check_secaescipherkey(debug_info, 3, key, 0, 1);
|
||||
@ -734,8 +737,8 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
|
||||
*cardnr = ((struct pkey_apqn *)_apqns)->card;
|
||||
*domain = ((struct pkey_apqn *)_apqns)->domain;
|
||||
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES) {
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES) {
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
rc = ep11_check_aes_key(debug_info, 3, key, keylen, 1);
|
||||
@ -757,8 +760,9 @@ static int pkey_verifykey2(const u8 *key, size_t keylen,
|
||||
*cardnr = ((struct pkey_apqn *)_apqns)->card;
|
||||
*domain = ((struct pkey_apqn *)_apqns)->domain;
|
||||
|
||||
} else
|
||||
} else {
|
||||
rc = -EINVAL;
|
||||
}
|
||||
|
||||
out:
|
||||
kfree(_apqns);
|
||||
@ -816,16 +820,17 @@ static int pkey_keyblob2pkey2(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
for (i = 0, rc = -ENODEV; i < nr_apqns; i++) {
|
||||
card = apqns[i].card;
|
||||
dom = apqns[i].domain;
|
||||
if (hdr->type == TOKTYPE_CCA_INTERNAL
|
||||
&& hdr->version == TOKVER_CCA_AES)
|
||||
if (hdr->type == TOKTYPE_CCA_INTERNAL &&
|
||||
hdr->version == TOKVER_CCA_AES) {
|
||||
rc = cca_sec2protkey(card, dom, key, pkey->protkey,
|
||||
&pkey->len, &pkey->type);
|
||||
else if (hdr->type == TOKTYPE_CCA_INTERNAL
|
||||
&& hdr->version == TOKVER_CCA_VLSC)
|
||||
} else if (hdr->type == TOKTYPE_CCA_INTERNAL &&
|
||||
hdr->version == TOKVER_CCA_VLSC) {
|
||||
rc = cca_cipher2protkey(card, dom, key, pkey->protkey,
|
||||
&pkey->len, &pkey->type);
|
||||
else { /* EP11 AES secure key blob */
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) key;
|
||||
} else {
|
||||
/* EP11 AES secure key blob */
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
pkey->len = sizeof(pkey->protkey);
|
||||
rc = ep11_kblob2protkey(card, dom, key, kb->head.len,
|
||||
@ -851,10 +856,10 @@ static int pkey_apqns4key(const u8 *key, size_t keylen, u32 flags,
|
||||
|
||||
zcrypt_wait_api_operational();
|
||||
|
||||
if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& (hdr->version == TOKVER_EP11_AES_WITH_HEADER
|
||||
|| hdr->version == TOKVER_EP11_ECC_WITH_HEADER)
|
||||
&& is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
(hdr->version == TOKVER_EP11_AES_WITH_HEADER ||
|
||||
hdr->version == TOKVER_EP11_ECC_WITH_HEADER) &&
|
||||
is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
int minhwtype = 0, api = 0;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)
|
||||
(key + sizeof(struct ep11kblob_header));
|
||||
@ -869,11 +874,11 @@ static int pkey_apqns4key(const u8 *key, size_t keylen, u32 flags,
|
||||
minhwtype, api, kb->wkvp);
|
||||
if (rc)
|
||||
goto out;
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES
|
||||
&& is_ep11_keyblob(key)) {
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES &&
|
||||
is_ep11_keyblob(key)) {
|
||||
int minhwtype = 0, api = 0;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
if (flags != PKEY_FLAGS_MATCH_CUR_MKVP)
|
||||
return -EINVAL;
|
||||
@ -931,8 +936,9 @@ static int pkey_apqns4key(const u8 *key, size_t keylen, u32 flags,
|
||||
cur_mkvp, old_mkvp, 1);
|
||||
if (rc)
|
||||
goto out;
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (apqns) {
|
||||
if (*nr_apqns < _nr_apqns)
|
||||
@ -961,9 +967,9 @@ static int pkey_apqns4keytype(enum pkey_key_type ktype,
|
||||
int minhwtype = ZCRYPT_CEX3C;
|
||||
|
||||
if (flags & PKEY_FLAGS_MATCH_CUR_MKVP)
|
||||
cur_mkvp = *((u64 *) cur_mkvp);
|
||||
cur_mkvp = *((u64 *)cur_mkvp);
|
||||
if (flags & PKEY_FLAGS_MATCH_ALT_MKVP)
|
||||
old_mkvp = *((u64 *) alt_mkvp);
|
||||
old_mkvp = *((u64 *)alt_mkvp);
|
||||
if (ktype == PKEY_TYPE_CCA_CIPHER)
|
||||
minhwtype = ZCRYPT_CEX6;
|
||||
rc = cca_findcard2(&_apqns, &_nr_apqns, 0xFFFF, 0xFFFF,
|
||||
@ -975,9 +981,9 @@ static int pkey_apqns4keytype(enum pkey_key_type ktype,
|
||||
u64 cur_mkvp = 0, old_mkvp = 0;
|
||||
|
||||
if (flags & PKEY_FLAGS_MATCH_CUR_MKVP)
|
||||
cur_mkvp = *((u64 *) cur_mkvp);
|
||||
cur_mkvp = *((u64 *)cur_mkvp);
|
||||
if (flags & PKEY_FLAGS_MATCH_ALT_MKVP)
|
||||
old_mkvp = *((u64 *) alt_mkvp);
|
||||
old_mkvp = *((u64 *)alt_mkvp);
|
||||
rc = cca_findcard2(&_apqns, &_nr_apqns, 0xFFFF, 0xFFFF,
|
||||
ZCRYPT_CEX7, APKA_MK_SET,
|
||||
cur_mkvp, old_mkvp, 1);
|
||||
@ -996,8 +1002,9 @@ static int pkey_apqns4keytype(enum pkey_key_type ktype,
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (apqns) {
|
||||
if (*nr_apqns < _nr_apqns)
|
||||
@ -1026,21 +1033,21 @@ static int pkey_keyblob2pkey3(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
if (keylen < sizeof(struct keytoken_header))
|
||||
return -EINVAL;
|
||||
|
||||
if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES_WITH_HEADER
|
||||
&& is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES_WITH_HEADER &&
|
||||
is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
/* EP11 AES key blob with header */
|
||||
if (ep11_check_aes_key_with_hdr(debug_info, 3, key, keylen, 1))
|
||||
return -EINVAL;
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_ECC_WITH_HEADER
|
||||
&& is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_ECC_WITH_HEADER &&
|
||||
is_ep11_keyblob(key + sizeof(struct ep11kblob_header))) {
|
||||
/* EP11 ECC key blob with header */
|
||||
if (ep11_check_ecc_key_with_hdr(debug_info, 3, key, keylen, 1))
|
||||
return -EINVAL;
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES
|
||||
&& is_ep11_keyblob(key)) {
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES &&
|
||||
is_ep11_keyblob(key)) {
|
||||
/* EP11 AES key blob with header in session field */
|
||||
if (ep11_check_aes_key(debug_info, 3, key, keylen, 1))
|
||||
return -EINVAL;
|
||||
@ -1088,15 +1095,15 @@ static int pkey_keyblob2pkey3(const struct pkey_apqn *apqns, size_t nr_apqns,
|
||||
for (rc = -ENODEV, i = 0; rc && i < nr_apqns; i++) {
|
||||
card = apqns[i].card;
|
||||
dom = apqns[i].domain;
|
||||
if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& (hdr->version == TOKVER_EP11_AES_WITH_HEADER
|
||||
|| hdr->version == TOKVER_EP11_ECC_WITH_HEADER)
|
||||
&& is_ep11_keyblob(key + sizeof(struct ep11kblob_header)))
|
||||
if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
(hdr->version == TOKVER_EP11_AES_WITH_HEADER ||
|
||||
hdr->version == TOKVER_EP11_ECC_WITH_HEADER) &&
|
||||
is_ep11_keyblob(key + sizeof(struct ep11kblob_header)))
|
||||
rc = ep11_kblob2protkey(card, dom, key, hdr->len,
|
||||
protkey, protkeylen, protkeytype);
|
||||
else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES
|
||||
&& is_ep11_keyblob(key))
|
||||
else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES &&
|
||||
is_ep11_keyblob(key))
|
||||
rc = ep11_kblob2protkey(card, dom, key, hdr->len,
|
||||
protkey, protkeylen, protkeytype);
|
||||
else if (hdr->type == TOKTYPE_CCA_INTERNAL &&
|
||||
@ -1144,7 +1151,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
|
||||
switch (cmd) {
|
||||
case PKEY_GENSECK: {
|
||||
struct pkey_genseck __user *ugs = (void __user *) arg;
|
||||
struct pkey_genseck __user *ugs = (void __user *)arg;
|
||||
struct pkey_genseck kgs;
|
||||
|
||||
if (copy_from_user(&kgs, ugs, sizeof(kgs)))
|
||||
@ -1159,7 +1166,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_CLR2SECK: {
|
||||
struct pkey_clr2seck __user *ucs = (void __user *) arg;
|
||||
struct pkey_clr2seck __user *ucs = (void __user *)arg;
|
||||
struct pkey_clr2seck kcs;
|
||||
|
||||
if (copy_from_user(&kcs, ucs, sizeof(kcs)))
|
||||
@ -1175,7 +1182,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_SEC2PROTK: {
|
||||
struct pkey_sec2protk __user *usp = (void __user *) arg;
|
||||
struct pkey_sec2protk __user *usp = (void __user *)arg;
|
||||
struct pkey_sec2protk ksp;
|
||||
|
||||
if (copy_from_user(&ksp, usp, sizeof(ksp)))
|
||||
@ -1191,7 +1198,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_CLR2PROTK: {
|
||||
struct pkey_clr2protk __user *ucp = (void __user *) arg;
|
||||
struct pkey_clr2protk __user *ucp = (void __user *)arg;
|
||||
struct pkey_clr2protk kcp;
|
||||
|
||||
if (copy_from_user(&kcp, ucp, sizeof(kcp)))
|
||||
@ -1207,7 +1214,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_FINDCARD: {
|
||||
struct pkey_findcard __user *ufc = (void __user *) arg;
|
||||
struct pkey_findcard __user *ufc = (void __user *)arg;
|
||||
struct pkey_findcard kfc;
|
||||
|
||||
if (copy_from_user(&kfc, ufc, sizeof(kfc)))
|
||||
@ -1222,7 +1229,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_SKEY2PKEY: {
|
||||
struct pkey_skey2pkey __user *usp = (void __user *) arg;
|
||||
struct pkey_skey2pkey __user *usp = (void __user *)arg;
|
||||
struct pkey_skey2pkey ksp;
|
||||
|
||||
if (copy_from_user(&ksp, usp, sizeof(ksp)))
|
||||
@ -1236,7 +1243,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_VERIFYKEY: {
|
||||
struct pkey_verifykey __user *uvk = (void __user *) arg;
|
||||
struct pkey_verifykey __user *uvk = (void __user *)arg;
|
||||
struct pkey_verifykey kvk;
|
||||
|
||||
if (copy_from_user(&kvk, uvk, sizeof(kvk)))
|
||||
@ -1251,7 +1258,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_GENPROTK: {
|
||||
struct pkey_genprotk __user *ugp = (void __user *) arg;
|
||||
struct pkey_genprotk __user *ugp = (void __user *)arg;
|
||||
struct pkey_genprotk kgp;
|
||||
|
||||
if (copy_from_user(&kgp, ugp, sizeof(kgp)))
|
||||
@ -1265,7 +1272,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_VERIFYPROTK: {
|
||||
struct pkey_verifyprotk __user *uvp = (void __user *) arg;
|
||||
struct pkey_verifyprotk __user *uvp = (void __user *)arg;
|
||||
struct pkey_verifyprotk kvp;
|
||||
|
||||
if (copy_from_user(&kvp, uvp, sizeof(kvp)))
|
||||
@ -1275,7 +1282,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_KBLOB2PROTK: {
|
||||
struct pkey_kblob2pkey __user *utp = (void __user *) arg;
|
||||
struct pkey_kblob2pkey __user *utp = (void __user *)arg;
|
||||
struct pkey_kblob2pkey ktp;
|
||||
u8 *kkey;
|
||||
|
||||
@ -1294,7 +1301,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_GENSECK2: {
|
||||
struct pkey_genseck2 __user *ugs = (void __user *) arg;
|
||||
struct pkey_genseck2 __user *ugs = (void __user *)arg;
|
||||
struct pkey_genseck2 kgs;
|
||||
struct pkey_apqn *apqns;
|
||||
size_t klen = KEYBLOBBUFSIZE;
|
||||
@ -1336,7 +1343,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_CLR2SECK2: {
|
||||
struct pkey_clr2seck2 __user *ucs = (void __user *) arg;
|
||||
struct pkey_clr2seck2 __user *ucs = (void __user *)arg;
|
||||
struct pkey_clr2seck2 kcs;
|
||||
struct pkey_apqn *apqns;
|
||||
size_t klen = KEYBLOBBUFSIZE;
|
||||
@ -1379,7 +1386,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_VERIFYKEY2: {
|
||||
struct pkey_verifykey2 __user *uvk = (void __user *) arg;
|
||||
struct pkey_verifykey2 __user *uvk = (void __user *)arg;
|
||||
struct pkey_verifykey2 kvk;
|
||||
u8 *kkey;
|
||||
|
||||
@ -1400,7 +1407,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_KBLOB2PROTK2: {
|
||||
struct pkey_kblob2pkey2 __user *utp = (void __user *) arg;
|
||||
struct pkey_kblob2pkey2 __user *utp = (void __user *)arg;
|
||||
struct pkey_kblob2pkey2 ktp;
|
||||
struct pkey_apqn *apqns = NULL;
|
||||
u8 *kkey;
|
||||
@ -1427,7 +1434,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_APQNS4K: {
|
||||
struct pkey_apqns4key __user *uak = (void __user *) arg;
|
||||
struct pkey_apqns4key __user *uak = (void __user *)arg;
|
||||
struct pkey_apqns4key kak;
|
||||
struct pkey_apqn *apqns = NULL;
|
||||
size_t nr_apqns, len;
|
||||
@ -1476,7 +1483,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_APQNS4KT: {
|
||||
struct pkey_apqns4keytype __user *uat = (void __user *) arg;
|
||||
struct pkey_apqns4keytype __user *uat = (void __user *)arg;
|
||||
struct pkey_apqns4keytype kat;
|
||||
struct pkey_apqn *apqns = NULL;
|
||||
size_t nr_apqns, len;
|
||||
@ -1518,7 +1525,7 @@ static long pkey_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
break;
|
||||
}
|
||||
case PKEY_KBLOB2PROTK3: {
|
||||
struct pkey_kblob2pkey3 __user *utp = (void __user *) arg;
|
||||
struct pkey_kblob2pkey3 __user *utp = (void __user *)arg;
|
||||
struct pkey_kblob2pkey3 ktp;
|
||||
struct pkey_apqn *apqns = NULL;
|
||||
u32 protkeylen = PROTKEYBLOBBUFSIZE;
|
||||
@ -1708,7 +1715,7 @@ static ssize_t pkey_ccadata_aes_attr_read(u32 keytype, bool is_xts, char *buf,
|
||||
loff_t off, size_t count)
|
||||
{
|
||||
int rc;
|
||||
struct pkey_seckey *seckey = (struct pkey_seckey *) buf;
|
||||
struct pkey_seckey *seckey = (struct pkey_seckey *)buf;
|
||||
|
||||
if (off != 0 || count < sizeof(struct secaeskeytoken))
|
||||
return -EINVAL;
|
||||
|
@ -104,7 +104,7 @@ struct zcrypt_ops *zcrypt_msgtype(unsigned char *name, int variant)
|
||||
struct zcrypt_ops *zops;
|
||||
|
||||
list_for_each_entry(zops, &zcrypt_ops_list, list)
|
||||
if ((zops->variant == variant) &&
|
||||
if (zops->variant == variant &&
|
||||
(!strncmp(zops->name, name, sizeof(zops->name))))
|
||||
return zops;
|
||||
return NULL;
|
||||
@ -438,8 +438,8 @@ static int zcdn_create(const char *name)
|
||||
strncpy(nodename, name, sizeof(nodename));
|
||||
else
|
||||
snprintf(nodename, sizeof(nodename),
|
||||
ZCRYPT_NAME "_%d", (int) MINOR(devt));
|
||||
nodename[sizeof(nodename)-1] = '\0';
|
||||
ZCRYPT_NAME "_%d", (int)MINOR(devt));
|
||||
nodename[sizeof(nodename) - 1] = '\0';
|
||||
if (dev_set_name(&zcdndev->device, nodename)) {
|
||||
rc = -EINVAL;
|
||||
goto unlockout;
|
||||
@ -519,7 +519,7 @@ static ssize_t zcrypt_read(struct file *filp, char __user *buf,
|
||||
/*
|
||||
* zcrypt_write(): Not allowed.
|
||||
*
|
||||
* Write is is not allowed
|
||||
* Write is not allowed
|
||||
*/
|
||||
static ssize_t zcrypt_write(struct file *filp, const char __user *buf,
|
||||
size_t count, loff_t *f_pos)
|
||||
@ -549,7 +549,7 @@ static int zcrypt_open(struct inode *inode, struct file *filp)
|
||||
perms = &zcdndev->perms;
|
||||
}
|
||||
#endif
|
||||
filp->private_data = (void *) perms;
|
||||
filp->private_data = (void *)perms;
|
||||
|
||||
atomic_inc(&zcrypt_open_count);
|
||||
return stream_open(inode, filp);
|
||||
@ -713,7 +713,7 @@ static long zcrypt_rsa_modexpo(struct ap_perms *perms,
|
||||
pref_zq = NULL;
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
for_each_zcrypt_card(zc) {
|
||||
/* Check for useable accelarator or CCA card */
|
||||
/* Check for usable accelarator or CCA card */
|
||||
if (!zc->online || !zc->card->config || zc->card->chkstop ||
|
||||
!(zc->card->functions & 0x18000000))
|
||||
continue;
|
||||
@ -733,7 +733,7 @@ static long zcrypt_rsa_modexpo(struct ap_perms *perms,
|
||||
if (!zcrypt_card_compare(zc, pref_zc, wgt + cpen, pref_wgt))
|
||||
continue;
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is useable and eligible */
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rsa_modexpo ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
continue;
|
||||
@ -823,7 +823,7 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
|
||||
pref_zq = NULL;
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
for_each_zcrypt_card(zc) {
|
||||
/* Check for useable accelarator or CCA card */
|
||||
/* Check for usable accelarator or CCA card */
|
||||
if (!zc->online || !zc->card->config || zc->card->chkstop ||
|
||||
!(zc->card->functions & 0x18000000))
|
||||
continue;
|
||||
@ -843,7 +843,7 @@ static long zcrypt_rsa_crt(struct ap_perms *perms,
|
||||
if (!zcrypt_card_compare(zc, pref_zc, wgt + cpen, pref_wgt))
|
||||
continue;
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is useable and eligible */
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rsa_modexpo_crt ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
continue;
|
||||
@ -893,7 +893,7 @@ out:
|
||||
|
||||
static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
struct zcrypt_track *tr,
|
||||
struct ica_xcRB *xcRB)
|
||||
struct ica_xcRB *xcrb)
|
||||
{
|
||||
struct zcrypt_card *zc, *pref_zc;
|
||||
struct zcrypt_queue *zq, *pref_zq;
|
||||
@ -904,9 +904,9 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
int cpen, qpen, qid = 0, rc = -ENODEV;
|
||||
struct module *mod;
|
||||
|
||||
trace_s390_zcrypt_req(xcRB, TB_ZSECSENDCPRB);
|
||||
trace_s390_zcrypt_req(xcrb, TB_ZSECSENDCPRB);
|
||||
|
||||
xcRB->status = 0;
|
||||
xcrb->status = 0;
|
||||
ap_init_message(&ap_msg);
|
||||
|
||||
#ifdef CONFIG_ZCRYPT_DEBUG
|
||||
@ -915,11 +915,11 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
if (tr && tr->fi.action == AP_FI_ACTION_CCA_AGENT_FF) {
|
||||
ZCRYPT_DBF_WARN("%s fi cmd 0x%04x: forcing invalid agent_ID 'FF'\n",
|
||||
__func__, tr->fi.cmd);
|
||||
xcRB->agent_ID = 0x4646;
|
||||
xcrb->agent_ID = 0x4646;
|
||||
}
|
||||
#endif
|
||||
|
||||
rc = prep_cca_ap_msg(userspace, xcRB, &ap_msg, &func_code, &domain);
|
||||
rc = prep_cca_ap_msg(userspace, xcrb, &ap_msg, &func_code, &domain);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
@ -948,13 +948,13 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
pref_zq = NULL;
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
for_each_zcrypt_card(zc) {
|
||||
/* Check for useable CCA card */
|
||||
/* Check for usable CCA card */
|
||||
if (!zc->online || !zc->card->config || zc->card->chkstop ||
|
||||
!(zc->card->functions & 0x10000000))
|
||||
continue;
|
||||
/* Check for user selected CCA card */
|
||||
if (xcRB->user_defined != AUTOSELECT &&
|
||||
xcRB->user_defined != zc->card->id)
|
||||
if (xcrb->user_defined != AUTOSELECT &&
|
||||
xcrb->user_defined != zc->card->id)
|
||||
continue;
|
||||
/* check if request size exceeds card max msg size */
|
||||
if (ap_msg.len > zc->card->maxmsgsize)
|
||||
@ -971,7 +971,7 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
if (!zcrypt_card_compare(zc, pref_zc, wgt + cpen, pref_wgt))
|
||||
continue;
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check for device useable and eligible */
|
||||
/* check for device usable and eligible */
|
||||
if (!zq->online || !zq->ops->send_cprb ||
|
||||
!zq->queue->config || zq->queue->chkstop ||
|
||||
(tdom != AUTOSEL_DOM &&
|
||||
@ -998,7 +998,7 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
|
||||
if (!pref_zq) {
|
||||
ZCRYPT_DBF_DBG("%s no match for address %02x.%04x => ENODEV\n",
|
||||
__func__, xcRB->user_defined, *domain);
|
||||
__func__, xcrb->user_defined, *domain);
|
||||
rc = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
@ -1016,7 +1016,7 @@ static long _zcrypt_send_cprb(bool userspace, struct ap_perms *perms,
|
||||
}
|
||||
#endif
|
||||
|
||||
rc = pref_zq->ops->send_cprb(userspace, pref_zq, xcRB, &ap_msg);
|
||||
rc = pref_zq->ops->send_cprb(userspace, pref_zq, xcrb, &ap_msg);
|
||||
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
zcrypt_drop_queue(pref_zc, pref_zq, mod, wgt);
|
||||
@ -1028,14 +1028,14 @@ out:
|
||||
tr->last_rc = rc;
|
||||
tr->last_qid = qid;
|
||||
}
|
||||
trace_s390_zcrypt_rep(xcRB, func_code, rc,
|
||||
trace_s390_zcrypt_rep(xcrb, func_code, rc,
|
||||
AP_QID_CARD(qid), AP_QID_QUEUE(qid));
|
||||
return rc;
|
||||
}
|
||||
|
||||
long zcrypt_send_cprb(struct ica_xcRB *xcRB)
|
||||
long zcrypt_send_cprb(struct ica_xcRB *xcrb)
|
||||
{
|
||||
return _zcrypt_send_cprb(false, &ap_perms, NULL, xcRB);
|
||||
return _zcrypt_send_cprb(false, &ap_perms, NULL, xcrb);
|
||||
}
|
||||
EXPORT_SYMBOL(zcrypt_send_cprb);
|
||||
|
||||
@ -1089,7 +1089,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
ap_msg.fi.cmd = tr->fi.cmd;
|
||||
#endif
|
||||
|
||||
target_num = (unsigned short) xcrb->targets_num;
|
||||
target_num = (unsigned short)xcrb->targets_num;
|
||||
|
||||
/* empty list indicates autoselect (all available targets) */
|
||||
targets = NULL;
|
||||
@ -1103,9 +1103,9 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
goto out;
|
||||
}
|
||||
|
||||
uptr = (struct ep11_target_dev __force __user *) xcrb->targets;
|
||||
uptr = (struct ep11_target_dev __force __user *)xcrb->targets;
|
||||
if (z_copy_from_user(userspace, targets, uptr,
|
||||
target_num * sizeof(*targets))) {
|
||||
target_num * sizeof(*targets))) {
|
||||
func_code = 0;
|
||||
rc = -EFAULT;
|
||||
goto out_free;
|
||||
@ -1132,7 +1132,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
pref_zq = NULL;
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
for_each_zcrypt_card(zc) {
|
||||
/* Check for useable EP11 card */
|
||||
/* Check for usable EP11 card */
|
||||
if (!zc->online || !zc->card->config || zc->card->chkstop ||
|
||||
!(zc->card->functions & 0x04000000))
|
||||
continue;
|
||||
@ -1155,7 +1155,7 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
if (!zcrypt_card_compare(zc, pref_zc, wgt + cpen, pref_wgt))
|
||||
continue;
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is useable and eligible */
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->send_ep11_cprb ||
|
||||
!zq->queue->config || zq->queue->chkstop ||
|
||||
(targets &&
|
||||
@ -1184,11 +1184,11 @@ static long _zcrypt_send_ep11_cprb(bool userspace, struct ap_perms *perms,
|
||||
if (!pref_zq) {
|
||||
if (targets && target_num == 1) {
|
||||
ZCRYPT_DBF_DBG("%s no match for address %02x.%04x => ENODEV\n",
|
||||
__func__, (int) targets->ap_id,
|
||||
(int) targets->dom_id);
|
||||
__func__, (int)targets->ap_id,
|
||||
(int)targets->dom_id);
|
||||
} else if (targets) {
|
||||
ZCRYPT_DBF_DBG("%s no match for %d target addrs => ENODEV\n",
|
||||
__func__, (int) target_num);
|
||||
__func__, (int)target_num);
|
||||
} else {
|
||||
ZCRYPT_DBF_DBG("%s no match for address ff.ffff => ENODEV\n",
|
||||
__func__);
|
||||
@ -1245,7 +1245,7 @@ static long zcrypt_rng(char *buffer)
|
||||
pref_zq = NULL;
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
for_each_zcrypt_card(zc) {
|
||||
/* Check for useable CCA card */
|
||||
/* Check for usable CCA card */
|
||||
if (!zc->online || !zc->card->config || zc->card->chkstop ||
|
||||
!(zc->card->functions & 0x10000000))
|
||||
continue;
|
||||
@ -1254,7 +1254,7 @@ static long zcrypt_rng(char *buffer)
|
||||
if (!zcrypt_card_compare(zc, pref_zc, wgt, pref_wgt))
|
||||
continue;
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
/* check if device is useable and eligible */
|
||||
/* check if device is usable and eligible */
|
||||
if (!zq->online || !zq->ops->rng ||
|
||||
!zq->queue->config || zq->queue->chkstop)
|
||||
continue;
|
||||
@ -1270,7 +1270,7 @@ static long zcrypt_rng(char *buffer)
|
||||
|
||||
if (!pref_zq) {
|
||||
ZCRYPT_DBF_DBG("%s no matching queue found => ENODEV\n",
|
||||
__func__);
|
||||
__func__);
|
||||
rc = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
@ -1381,8 +1381,8 @@ static void zcrypt_status_mask(char status[], size_t max_adapters)
|
||||
for_each_zcrypt_card(zc) {
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
card = AP_QID_CARD(zq->queue->qid);
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index
|
||||
|| card >= max_adapters)
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index ||
|
||||
card >= max_adapters)
|
||||
continue;
|
||||
status[card] = zc->online ? zc->user_space_type : 0x0d;
|
||||
}
|
||||
@ -1402,8 +1402,8 @@ static void zcrypt_qdepth_mask(char qdepth[], size_t max_adapters)
|
||||
for_each_zcrypt_card(zc) {
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
card = AP_QID_CARD(zq->queue->qid);
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index
|
||||
|| card >= max_adapters)
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index ||
|
||||
card >= max_adapters)
|
||||
continue;
|
||||
spin_lock(&zq->queue->lock);
|
||||
qdepth[card] =
|
||||
@ -1429,13 +1429,13 @@ static void zcrypt_perdev_reqcnt(u32 reqcnt[], size_t max_adapters)
|
||||
for_each_zcrypt_card(zc) {
|
||||
for_each_zcrypt_queue(zq, zc) {
|
||||
card = AP_QID_CARD(zq->queue->qid);
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index
|
||||
|| card >= max_adapters)
|
||||
if (AP_QID_QUEUE(zq->queue->qid) != ap_domain_index ||
|
||||
card >= max_adapters)
|
||||
continue;
|
||||
spin_lock(&zq->queue->lock);
|
||||
cnt = zq->queue->total_request_count;
|
||||
spin_unlock(&zq->queue->lock);
|
||||
reqcnt[card] = (cnt < UINT_MAX) ? (u32) cnt : UINT_MAX;
|
||||
reqcnt[card] = (cnt < UINT_MAX) ? (u32)cnt : UINT_MAX;
|
||||
}
|
||||
}
|
||||
local_bh_enable();
|
||||
@ -1493,7 +1493,7 @@ static int icarsamodexpo_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
int rc;
|
||||
struct zcrypt_track tr;
|
||||
struct ica_rsa_modexpo mex;
|
||||
struct ica_rsa_modexpo __user *umex = (void __user *) arg;
|
||||
struct ica_rsa_modexpo __user *umex = (void __user *)arg;
|
||||
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
if (copy_from_user(&mex, umex, sizeof(mex)))
|
||||
@ -1538,7 +1538,7 @@ static int icarsacrt_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
int rc;
|
||||
struct zcrypt_track tr;
|
||||
struct ica_rsa_modexpo_crt crt;
|
||||
struct ica_rsa_modexpo_crt __user *ucrt = (void __user *) arg;
|
||||
struct ica_rsa_modexpo_crt __user *ucrt = (void __user *)arg;
|
||||
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
if (copy_from_user(&crt, ucrt, sizeof(crt)))
|
||||
@ -1581,25 +1581,25 @@ static int icarsacrt_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
{
|
||||
int rc;
|
||||
struct ica_xcRB xcRB;
|
||||
struct ica_xcRB xcrb;
|
||||
struct zcrypt_track tr;
|
||||
struct ica_xcRB __user *uxcRB = (void __user *) arg;
|
||||
struct ica_xcRB __user *uxcrb = (void __user *)arg;
|
||||
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
if (copy_from_user(&xcRB, uxcRB, sizeof(xcRB)))
|
||||
if (copy_from_user(&xcrb, uxcrb, sizeof(xcrb)))
|
||||
return -EFAULT;
|
||||
|
||||
#ifdef CONFIG_ZCRYPT_DEBUG
|
||||
if ((xcRB.status & 0x8000FFFF) == 0x80004649 /* 'FI' */) {
|
||||
if ((xcrb.status & 0x8000FFFF) == 0x80004649 /* 'FI' */) {
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
tr.fi.cmd = (u16)(xcRB.status >> 16);
|
||||
tr.fi.cmd = (u16)(xcrb.status >> 16);
|
||||
}
|
||||
xcRB.status = 0;
|
||||
xcrb.status = 0;
|
||||
#endif
|
||||
|
||||
do {
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcRB);
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb);
|
||||
if (rc == -EAGAIN)
|
||||
tr.again_counter++;
|
||||
#ifdef CONFIG_ZCRYPT_DEBUG
|
||||
@ -1610,7 +1610,7 @@ static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
/* on failure: retry once again after a requested rescan */
|
||||
if ((rc == -ENODEV) && (zcrypt_process_rescan()))
|
||||
do {
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcRB);
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb);
|
||||
if (rc == -EAGAIN)
|
||||
tr.again_counter++;
|
||||
} while (rc == -EAGAIN && tr.again_counter < TRACK_AGAIN_MAX);
|
||||
@ -1618,8 +1618,8 @@ static int zsecsendcprb_ioctl(struct ap_perms *perms, unsigned long arg)
|
||||
rc = -EIO;
|
||||
if (rc)
|
||||
ZCRYPT_DBF_DBG("ioctl ZSENDCPRB rc=%d status=0x%x\n",
|
||||
rc, xcRB.status);
|
||||
if (copy_to_user(uxcRB, &xcRB, sizeof(xcRB)))
|
||||
rc, xcrb.status);
|
||||
if (copy_to_user(uxcrb, &xcrb, sizeof(xcrb)))
|
||||
return -EFAULT;
|
||||
return rc;
|
||||
}
|
||||
@ -1674,7 +1674,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
{
|
||||
int rc;
|
||||
struct ap_perms *perms =
|
||||
(struct ap_perms *) filp->private_data;
|
||||
(struct ap_perms *)filp->private_data;
|
||||
|
||||
rc = zcrypt_check_ioctl(perms, cmd);
|
||||
if (rc)
|
||||
@ -1698,7 +1698,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
if (!device_status)
|
||||
return -ENOMEM;
|
||||
zcrypt_device_status_mask_ext(device_status);
|
||||
if (copy_to_user((char __user *) arg, device_status,
|
||||
if (copy_to_user((char __user *)arg, device_status,
|
||||
total_size))
|
||||
rc = -EFAULT;
|
||||
kfree(device_status);
|
||||
@ -1708,7 +1708,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
char status[AP_DEVICES];
|
||||
|
||||
zcrypt_status_mask(status, AP_DEVICES);
|
||||
if (copy_to_user((char __user *) arg, status, sizeof(status)))
|
||||
if (copy_to_user((char __user *)arg, status, sizeof(status)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@ -1716,7 +1716,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
char qdepth[AP_DEVICES];
|
||||
|
||||
zcrypt_qdepth_mask(qdepth, AP_DEVICES);
|
||||
if (copy_to_user((char __user *) arg, qdepth, sizeof(qdepth)))
|
||||
if (copy_to_user((char __user *)arg, qdepth, sizeof(qdepth)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@ -1727,21 +1727,21 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
if (!reqcnt)
|
||||
return -ENOMEM;
|
||||
zcrypt_perdev_reqcnt(reqcnt, AP_DEVICES);
|
||||
if (copy_to_user((int __user *) arg, reqcnt,
|
||||
if (copy_to_user((int __user *)arg, reqcnt,
|
||||
sizeof(u32) * AP_DEVICES))
|
||||
rc = -EFAULT;
|
||||
kfree(reqcnt);
|
||||
return rc;
|
||||
}
|
||||
case Z90STAT_REQUESTQ_COUNT:
|
||||
return put_user(zcrypt_requestq_count(), (int __user *) arg);
|
||||
return put_user(zcrypt_requestq_count(), (int __user *)arg);
|
||||
case Z90STAT_PENDINGQ_COUNT:
|
||||
return put_user(zcrypt_pendingq_count(), (int __user *) arg);
|
||||
return put_user(zcrypt_pendingq_count(), (int __user *)arg);
|
||||
case Z90STAT_TOTALOPEN_COUNT:
|
||||
return put_user(atomic_read(&zcrypt_open_count),
|
||||
(int __user *) arg);
|
||||
(int __user *)arg);
|
||||
case Z90STAT_DOMAIN_INDEX:
|
||||
return put_user(ap_domain_index, (int __user *) arg);
|
||||
return put_user(ap_domain_index, (int __user *)arg);
|
||||
/*
|
||||
* Deprecated ioctls
|
||||
*/
|
||||
@ -1755,7 +1755,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
if (!device_status)
|
||||
return -ENOMEM;
|
||||
zcrypt_device_status_mask(device_status);
|
||||
if (copy_to_user((char __user *) arg, device_status,
|
||||
if (copy_to_user((char __user *)arg, device_status,
|
||||
total_size))
|
||||
rc = -EFAULT;
|
||||
kfree(device_status);
|
||||
@ -1766,7 +1766,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
char status[MAX_ZDEV_CARDIDS];
|
||||
|
||||
zcrypt_status_mask(status, MAX_ZDEV_CARDIDS);
|
||||
if (copy_to_user((char __user *) arg, status, sizeof(status)))
|
||||
if (copy_to_user((char __user *)arg, status, sizeof(status)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@ -1775,7 +1775,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
char qdepth[MAX_ZDEV_CARDIDS];
|
||||
|
||||
zcrypt_qdepth_mask(qdepth, MAX_ZDEV_CARDIDS);
|
||||
if (copy_to_user((char __user *) arg, qdepth, sizeof(qdepth)))
|
||||
if (copy_to_user((char __user *)arg, qdepth, sizeof(qdepth)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@ -1784,7 +1784,7 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
|
||||
u32 reqcnt[MAX_ZDEV_CARDIDS];
|
||||
|
||||
zcrypt_perdev_reqcnt(reqcnt, MAX_ZDEV_CARDIDS);
|
||||
if (copy_to_user((int __user *) arg, reqcnt, sizeof(reqcnt)))
|
||||
if (copy_to_user((int __user *)arg, reqcnt, sizeof(reqcnt)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
@ -1899,7 +1899,7 @@ static long trans_modexpo_crt32(struct ap_perms *perms, struct file *filp,
|
||||
&ucrt32->outputdatalength);
|
||||
}
|
||||
|
||||
struct compat_ica_xcRB {
|
||||
struct compat_ica_xcrb {
|
||||
unsigned short agent_ID;
|
||||
unsigned int user_defined;
|
||||
unsigned short request_ID;
|
||||
@ -1919,66 +1919,66 @@ struct compat_ica_xcRB {
|
||||
unsigned int status;
|
||||
} __packed;
|
||||
|
||||
static long trans_xcRB32(struct ap_perms *perms, struct file *filp,
|
||||
static long trans_xcrb32(struct ap_perms *perms, struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct compat_ica_xcRB __user *uxcRB32 = compat_ptr(arg);
|
||||
struct compat_ica_xcRB xcRB32;
|
||||
struct compat_ica_xcrb __user *uxcrb32 = compat_ptr(arg);
|
||||
struct compat_ica_xcrb xcrb32;
|
||||
struct zcrypt_track tr;
|
||||
struct ica_xcRB xcRB64;
|
||||
struct ica_xcRB xcrb64;
|
||||
long rc;
|
||||
|
||||
memset(&tr, 0, sizeof(tr));
|
||||
if (copy_from_user(&xcRB32, uxcRB32, sizeof(xcRB32)))
|
||||
if (copy_from_user(&xcrb32, uxcrb32, sizeof(xcrb32)))
|
||||
return -EFAULT;
|
||||
xcRB64.agent_ID = xcRB32.agent_ID;
|
||||
xcRB64.user_defined = xcRB32.user_defined;
|
||||
xcRB64.request_ID = xcRB32.request_ID;
|
||||
xcRB64.request_control_blk_length =
|
||||
xcRB32.request_control_blk_length;
|
||||
xcRB64.request_control_blk_addr =
|
||||
compat_ptr(xcRB32.request_control_blk_addr);
|
||||
xcRB64.request_data_length =
|
||||
xcRB32.request_data_length;
|
||||
xcRB64.request_data_address =
|
||||
compat_ptr(xcRB32.request_data_address);
|
||||
xcRB64.reply_control_blk_length =
|
||||
xcRB32.reply_control_blk_length;
|
||||
xcRB64.reply_control_blk_addr =
|
||||
compat_ptr(xcRB32.reply_control_blk_addr);
|
||||
xcRB64.reply_data_length = xcRB32.reply_data_length;
|
||||
xcRB64.reply_data_addr =
|
||||
compat_ptr(xcRB32.reply_data_addr);
|
||||
xcRB64.priority_window = xcRB32.priority_window;
|
||||
xcRB64.status = xcRB32.status;
|
||||
xcrb64.agent_ID = xcrb32.agent_ID;
|
||||
xcrb64.user_defined = xcrb32.user_defined;
|
||||
xcrb64.request_ID = xcrb32.request_ID;
|
||||
xcrb64.request_control_blk_length =
|
||||
xcrb32.request_control_blk_length;
|
||||
xcrb64.request_control_blk_addr =
|
||||
compat_ptr(xcrb32.request_control_blk_addr);
|
||||
xcrb64.request_data_length =
|
||||
xcrb32.request_data_length;
|
||||
xcrb64.request_data_address =
|
||||
compat_ptr(xcrb32.request_data_address);
|
||||
xcrb64.reply_control_blk_length =
|
||||
xcrb32.reply_control_blk_length;
|
||||
xcrb64.reply_control_blk_addr =
|
||||
compat_ptr(xcrb32.reply_control_blk_addr);
|
||||
xcrb64.reply_data_length = xcrb32.reply_data_length;
|
||||
xcrb64.reply_data_addr =
|
||||
compat_ptr(xcrb32.reply_data_addr);
|
||||
xcrb64.priority_window = xcrb32.priority_window;
|
||||
xcrb64.status = xcrb32.status;
|
||||
do {
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcRB64);
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb64);
|
||||
if (rc == -EAGAIN)
|
||||
tr.again_counter++;
|
||||
} while (rc == -EAGAIN && tr.again_counter < TRACK_AGAIN_MAX);
|
||||
/* on failure: retry once again after a requested rescan */
|
||||
if ((rc == -ENODEV) && (zcrypt_process_rescan()))
|
||||
do {
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcRB64);
|
||||
rc = _zcrypt_send_cprb(true, perms, &tr, &xcrb64);
|
||||
if (rc == -EAGAIN)
|
||||
tr.again_counter++;
|
||||
} while (rc == -EAGAIN && tr.again_counter < TRACK_AGAIN_MAX);
|
||||
if (rc == -EAGAIN && tr.again_counter >= TRACK_AGAIN_MAX)
|
||||
rc = -EIO;
|
||||
xcRB32.reply_control_blk_length = xcRB64.reply_control_blk_length;
|
||||
xcRB32.reply_data_length = xcRB64.reply_data_length;
|
||||
xcRB32.status = xcRB64.status;
|
||||
if (copy_to_user(uxcRB32, &xcRB32, sizeof(xcRB32)))
|
||||
xcrb32.reply_control_blk_length = xcrb64.reply_control_blk_length;
|
||||
xcrb32.reply_data_length = xcrb64.reply_data_length;
|
||||
xcrb32.status = xcrb64.status;
|
||||
if (copy_to_user(uxcrb32, &xcrb32, sizeof(xcrb32)))
|
||||
return -EFAULT;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static long zcrypt_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
unsigned long arg)
|
||||
{
|
||||
int rc;
|
||||
struct ap_perms *perms =
|
||||
(struct ap_perms *) filp->private_data;
|
||||
(struct ap_perms *)filp->private_data;
|
||||
|
||||
rc = zcrypt_check_ioctl(perms, cmd);
|
||||
if (rc)
|
||||
@ -1989,7 +1989,7 @@ static long zcrypt_compat_ioctl(struct file *filp, unsigned int cmd,
|
||||
if (cmd == ICARSACRT)
|
||||
return trans_modexpo_crt32(perms, filp, cmd, arg);
|
||||
if (cmd == ZSECSENDCPRB)
|
||||
return trans_xcRB32(perms, filp, cmd, arg);
|
||||
return trans_xcrb32(perms, filp, cmd, arg);
|
||||
return zcrypt_unlocked_ioctl(filp, cmd, arg);
|
||||
}
|
||||
#endif
|
||||
@ -2033,10 +2033,10 @@ static int zcrypt_rng_data_read(struct hwrng *rng, u32 *data)
|
||||
* read method calls.
|
||||
*/
|
||||
if (zcrypt_rng_buffer_index == 0) {
|
||||
rc = zcrypt_rng((char *) zcrypt_rng_buffer);
|
||||
rc = zcrypt_rng((char *)zcrypt_rng_buffer);
|
||||
/* on failure: retry once again after a requested rescan */
|
||||
if ((rc == -ENODEV) && (zcrypt_process_rescan()))
|
||||
rc = zcrypt_rng((char *) zcrypt_rng_buffer);
|
||||
rc = zcrypt_rng((char *)zcrypt_rng_buffer);
|
||||
if (rc < 0)
|
||||
return -EIO;
|
||||
zcrypt_rng_buffer_index = rc / sizeof(*data);
|
||||
@ -2057,7 +2057,7 @@ int zcrypt_rng_device_add(void)
|
||||
|
||||
mutex_lock(&zcrypt_rng_mutex);
|
||||
if (zcrypt_rng_device_count == 0) {
|
||||
zcrypt_rng_buffer = (u32 *) get_zeroed_page(GFP_KERNEL);
|
||||
zcrypt_rng_buffer = (u32 *)get_zeroed_page(GFP_KERNEL);
|
||||
if (!zcrypt_rng_buffer) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
@ -2069,13 +2069,14 @@ int zcrypt_rng_device_add(void)
|
||||
if (rc)
|
||||
goto out_free;
|
||||
zcrypt_rng_device_count = 1;
|
||||
} else
|
||||
} else {
|
||||
zcrypt_rng_device_count++;
|
||||
}
|
||||
mutex_unlock(&zcrypt_rng_mutex);
|
||||
return 0;
|
||||
|
||||
out_free:
|
||||
free_page((unsigned long) zcrypt_rng_buffer);
|
||||
free_page((unsigned long)zcrypt_rng_buffer);
|
||||
out:
|
||||
mutex_unlock(&zcrypt_rng_mutex);
|
||||
return rc;
|
||||
@ -2087,7 +2088,7 @@ void zcrypt_rng_device_remove(void)
|
||||
zcrypt_rng_device_count--;
|
||||
if (zcrypt_rng_device_count == 0) {
|
||||
hwrng_unregister(&zcrypt_rng_dev);
|
||||
free_page((unsigned long) zcrypt_rng_buffer);
|
||||
free_page((unsigned long)zcrypt_rng_buffer);
|
||||
}
|
||||
mutex_unlock(&zcrypt_rng_mutex);
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ static inline unsigned long z_copy_from_user(bool userspace,
|
||||
{
|
||||
if (likely(userspace))
|
||||
return copy_from_user(to, from, n);
|
||||
memcpy(to, (void __force *) from, n);
|
||||
memcpy(to, (void __force *)from, n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ static inline unsigned long z_copy_to_user(bool userspace,
|
||||
{
|
||||
if (likely(userspace))
|
||||
return copy_to_user(to, from, n);
|
||||
memcpy((void __force *) to, from, n);
|
||||
memcpy((void __force *)to, from, n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -138,7 +138,7 @@ struct zcrypt_card *zcrypt_card_alloc(void)
|
||||
{
|
||||
struct zcrypt_card *zc;
|
||||
|
||||
zc = kzalloc(sizeof(struct zcrypt_card), GFP_KERNEL);
|
||||
zc = kzalloc(sizeof(*zc), GFP_KERNEL);
|
||||
if (!zc)
|
||||
return NULL;
|
||||
INIT_LIST_HEAD(&zc->list);
|
||||
|
@ -11,7 +11,7 @@
|
||||
#ifndef _ZCRYPT_CCA_KEY_H_
|
||||
#define _ZCRYPT_CCA_KEY_H_
|
||||
|
||||
struct T6_keyBlock_hdr {
|
||||
struct t6_keyblock_hdr {
|
||||
unsigned short blen;
|
||||
unsigned short ulen;
|
||||
unsigned short flags;
|
||||
@ -63,7 +63,7 @@ struct cca_public_sec {
|
||||
* complement of the residue modulo 8 of the sum of
|
||||
* (p_len + q_len + dp_len + dq_len + u_len).
|
||||
*/
|
||||
struct cca_pvt_ext_CRT_sec {
|
||||
struct cca_pvt_ext_crt_sec {
|
||||
unsigned char section_identifier;
|
||||
unsigned char version;
|
||||
unsigned short section_length;
|
||||
@ -108,9 +108,9 @@ static inline int zcrypt_type6_mex_key_en(struct ica_rsa_modexpo *mex, void *p)
|
||||
.section_identifier = 0x04,
|
||||
};
|
||||
struct {
|
||||
struct T6_keyBlock_hdr t6_hdr;
|
||||
struct cca_token_hdr pubHdr;
|
||||
struct cca_public_sec pubSec;
|
||||
struct t6_keyblock_hdr t6_hdr;
|
||||
struct cca_token_hdr pubhdr;
|
||||
struct cca_public_sec pubsec;
|
||||
char exponent[0];
|
||||
} __packed *key = p;
|
||||
unsigned char *temp;
|
||||
@ -127,8 +127,8 @@ static inline int zcrypt_type6_mex_key_en(struct ica_rsa_modexpo *mex, void *p)
|
||||
|
||||
memset(key, 0, sizeof(*key));
|
||||
|
||||
key->pubHdr = static_pub_hdr;
|
||||
key->pubSec = static_pub_sec;
|
||||
key->pubhdr = static_pub_hdr;
|
||||
key->pubsec = static_pub_sec;
|
||||
|
||||
/* key parameter block */
|
||||
temp = key->exponent;
|
||||
@ -146,16 +146,16 @@ static inline int zcrypt_type6_mex_key_en(struct ica_rsa_modexpo *mex, void *p)
|
||||
if (copy_from_user(temp, mex->n_modulus, mex->inputdatalength))
|
||||
return -EFAULT;
|
||||
|
||||
key->pubSec.modulus_bit_len = 8 * mex->inputdatalength;
|
||||
key->pubSec.modulus_byte_len = mex->inputdatalength;
|
||||
key->pubSec.exponent_len = mex->inputdatalength - i;
|
||||
key->pubSec.section_length = sizeof(key->pubSec) +
|
||||
2*mex->inputdatalength - i;
|
||||
key->pubHdr.token_length =
|
||||
key->pubSec.section_length + sizeof(key->pubHdr);
|
||||
key->t6_hdr.ulen = key->pubHdr.token_length + 4;
|
||||
key->t6_hdr.blen = key->pubHdr.token_length + 6;
|
||||
return sizeof(*key) + 2*mex->inputdatalength - i;
|
||||
key->pubsec.modulus_bit_len = 8 * mex->inputdatalength;
|
||||
key->pubsec.modulus_byte_len = mex->inputdatalength;
|
||||
key->pubsec.exponent_len = mex->inputdatalength - i;
|
||||
key->pubsec.section_length = sizeof(key->pubsec) +
|
||||
2 * mex->inputdatalength - i;
|
||||
key->pubhdr.token_length =
|
||||
key->pubsec.section_length + sizeof(key->pubhdr);
|
||||
key->t6_hdr.ulen = key->pubhdr.token_length + 4;
|
||||
key->t6_hdr.blen = key->pubhdr.token_length + 6;
|
||||
return sizeof(*key) + 2 * mex->inputdatalength - i;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -177,9 +177,9 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
|
||||
};
|
||||
static char pk_exponent[3] = { 0x01, 0x00, 0x01 };
|
||||
struct {
|
||||
struct T6_keyBlock_hdr t6_hdr;
|
||||
struct t6_keyblock_hdr t6_hdr;
|
||||
struct cca_token_hdr token;
|
||||
struct cca_pvt_ext_CRT_sec pvt;
|
||||
struct cca_pvt_ext_crt_sec pvt;
|
||||
char key_parts[0];
|
||||
} __packed *key = p;
|
||||
struct cca_public_sec *pub;
|
||||
@ -198,8 +198,8 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
|
||||
|
||||
short_len = (crt->inputdatalength + 1) / 2;
|
||||
long_len = short_len + 8;
|
||||
pad_len = -(3*long_len + 2*short_len) & 7;
|
||||
key_len = 3*long_len + 2*short_len + pad_len + crt->inputdatalength;
|
||||
pad_len = -(3 * long_len + 2 * short_len) & 7;
|
||||
key_len = 3 * long_len + 2 * short_len + pad_len + crt->inputdatalength;
|
||||
size = sizeof(*key) + key_len + sizeof(*pub) + 3;
|
||||
|
||||
/* parameter block.key block */
|
||||
@ -223,15 +223,15 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
|
||||
/* key parts */
|
||||
if (copy_from_user(key->key_parts, crt->np_prime, long_len) ||
|
||||
copy_from_user(key->key_parts + long_len,
|
||||
crt->nq_prime, short_len) ||
|
||||
crt->nq_prime, short_len) ||
|
||||
copy_from_user(key->key_parts + long_len + short_len,
|
||||
crt->bp_key, long_len) ||
|
||||
copy_from_user(key->key_parts + 2*long_len + short_len,
|
||||
crt->bq_key, short_len) ||
|
||||
copy_from_user(key->key_parts + 2*long_len + 2*short_len,
|
||||
crt->u_mult_inv, long_len))
|
||||
crt->bp_key, long_len) ||
|
||||
copy_from_user(key->key_parts + 2 * long_len + short_len,
|
||||
crt->bq_key, short_len) ||
|
||||
copy_from_user(key->key_parts + 2 * long_len + 2 * short_len,
|
||||
crt->u_mult_inv, long_len))
|
||||
return -EFAULT;
|
||||
memset(key->key_parts + 3*long_len + 2*short_len + pad_len,
|
||||
memset(key->key_parts + 3 * long_len + 2 * short_len + pad_len,
|
||||
0xff, crt->inputdatalength);
|
||||
pub = (struct cca_public_sec *)(key->key_parts + key_len);
|
||||
*pub = static_cca_pub_sec;
|
||||
@ -241,7 +241,7 @@ static inline int zcrypt_type6_crt_key(struct ica_rsa_modexpo_crt *crt, void *p)
|
||||
* section. So, an arbitrary public exponent of 0x010001 will be
|
||||
* used.
|
||||
*/
|
||||
memcpy((char *) (pub + 1), pk_exponent, 3);
|
||||
memcpy((char *)(pub + 1), pk_exponent, 3);
|
||||
return size;
|
||||
}
|
||||
|
||||
|
@ -53,26 +53,26 @@ static DEFINE_SPINLOCK(cca_info_list_lock);
|
||||
int cca_check_secaeskeytoken(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *token, int keybitsize)
|
||||
{
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *) token;
|
||||
struct secaeskeytoken *t = (struct secaeskeytoken *)token;
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
|
||||
if (t->type != TOKTYPE_CCA_INTERNAL) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) t->type, TOKTYPE_CCA_INTERNAL);
|
||||
__func__, (int)t->type, TOKTYPE_CCA_INTERNAL);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->version != TOKVER_CCA_AES) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, version 0x%02x != 0x%02x\n",
|
||||
__func__, (int) t->version, TOKVER_CCA_AES);
|
||||
__func__, (int)t->version, TOKVER_CCA_AES);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (keybitsize > 0 && t->bitsize != keybitsize) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, bitsize %d != %d\n",
|
||||
__func__, (int) t->bitsize, keybitsize);
|
||||
__func__, (int)t->bitsize, keybitsize);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ int cca_check_secaescipherkey(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *token, int keybitsize,
|
||||
int checkcpacfexport)
|
||||
{
|
||||
struct cipherkeytoken *t = (struct cipherkeytoken *) token;
|
||||
struct cipherkeytoken *t = (struct cipherkeytoken *)token;
|
||||
bool keybitsizeok = true;
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
@ -101,37 +101,37 @@ int cca_check_secaescipherkey(debug_info_t *dbg, int dbflvl,
|
||||
if (t->type != TOKTYPE_CCA_INTERNAL) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) t->type, TOKTYPE_CCA_INTERNAL);
|
||||
__func__, (int)t->type, TOKTYPE_CCA_INTERNAL);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->version != TOKVER_CCA_VLSC) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, version 0x%02x != 0x%02x\n",
|
||||
__func__, (int) t->version, TOKVER_CCA_VLSC);
|
||||
__func__, (int)t->version, TOKVER_CCA_VLSC);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->algtype != 0x02) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, algtype 0x%02x != 0x02\n",
|
||||
__func__, (int) t->algtype);
|
||||
__func__, (int)t->algtype);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->keytype != 0x0001) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, keytype 0x%04x != 0x0001\n",
|
||||
__func__, (int) t->keytype);
|
||||
__func__, (int)t->keytype);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->plfver != 0x00 && t->plfver != 0x01) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, unknown plfver 0x%02x\n",
|
||||
__func__, (int) t->plfver);
|
||||
__func__, (int)t->plfver);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->wpllen != 512 && t->wpllen != 576 && t->wpllen != 640) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, unknown wpllen %d\n",
|
||||
__func__, (int) t->wpllen);
|
||||
__func__, (int)t->wpllen);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (keybitsize > 0) {
|
||||
@ -180,26 +180,26 @@ int cca_check_sececckeytoken(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *token, size_t keysize,
|
||||
int checkcpacfexport)
|
||||
{
|
||||
struct eccprivkeytoken *t = (struct eccprivkeytoken *) token;
|
||||
struct eccprivkeytoken *t = (struct eccprivkeytoken *)token;
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
|
||||
if (t->type != TOKTYPE_CCA_INTERNAL_PKA) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) t->type, TOKTYPE_CCA_INTERNAL_PKA);
|
||||
__func__, (int)t->type, TOKTYPE_CCA_INTERNAL_PKA);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->len > keysize) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, len %d > keysize %zu\n",
|
||||
__func__, (int) t->len, keysize);
|
||||
__func__, (int)t->len, keysize);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (t->secid != 0x20) {
|
||||
if (dbg)
|
||||
DBF("%s token check failed, secid 0x%02x != 0x20\n",
|
||||
__func__, (int) t->secid);
|
||||
__func__, (int)t->secid);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (checkcpacfexport && !(t->kutc & 0x01)) {
|
||||
@ -222,9 +222,9 @@ EXPORT_SYMBOL(cca_check_sececckeytoken);
|
||||
* on failure.
|
||||
*/
|
||||
static int alloc_and_prep_cprbmem(size_t paramblen,
|
||||
u8 **pcprbmem,
|
||||
struct CPRBX **preqCPRB,
|
||||
struct CPRBX **prepCPRB)
|
||||
u8 **p_cprb_mem,
|
||||
struct CPRBX **p_req_cprb,
|
||||
struct CPRBX **p_rep_cprb)
|
||||
{
|
||||
u8 *cprbmem;
|
||||
size_t cprbplusparamblen = sizeof(struct CPRBX) + paramblen;
|
||||
@ -238,8 +238,8 @@ static int alloc_and_prep_cprbmem(size_t paramblen,
|
||||
if (!cprbmem)
|
||||
return -ENOMEM;
|
||||
|
||||
preqcblk = (struct CPRBX *) cprbmem;
|
||||
prepcblk = (struct CPRBX *) (cprbmem + cprbplusparamblen);
|
||||
preqcblk = (struct CPRBX *)cprbmem;
|
||||
prepcblk = (struct CPRBX *)(cprbmem + cprbplusparamblen);
|
||||
|
||||
/* fill request cprb struct */
|
||||
preqcblk->cprb_len = sizeof(struct CPRBX);
|
||||
@ -248,14 +248,14 @@ static int alloc_and_prep_cprbmem(size_t paramblen,
|
||||
preqcblk->rpl_msgbl = cprbplusparamblen;
|
||||
if (paramblen) {
|
||||
preqcblk->req_parmb =
|
||||
((u8 __user *) preqcblk) + sizeof(struct CPRBX);
|
||||
((u8 __user *)preqcblk) + sizeof(struct CPRBX);
|
||||
preqcblk->rpl_parmb =
|
||||
((u8 __user *) prepcblk) + sizeof(struct CPRBX);
|
||||
((u8 __user *)prepcblk) + sizeof(struct CPRBX);
|
||||
}
|
||||
|
||||
*pcprbmem = cprbmem;
|
||||
*preqCPRB = preqcblk;
|
||||
*prepCPRB = prepcblk;
|
||||
*p_cprb_mem = cprbmem;
|
||||
*p_req_cprb = preqcblk;
|
||||
*p_rep_cprb = prepcblk;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -286,9 +286,9 @@ static inline void prep_xcrb(struct ica_xcRB *pxcrb,
|
||||
pxcrb->user_defined = (cardnr == 0xFFFF ? AUTOSELECT : cardnr);
|
||||
pxcrb->request_control_blk_length =
|
||||
preqcblk->cprb_len + preqcblk->req_parml;
|
||||
pxcrb->request_control_blk_addr = (void __user *) preqcblk;
|
||||
pxcrb->request_control_blk_addr = (void __user *)preqcblk;
|
||||
pxcrb->reply_control_blk_length = preqcblk->rpl_msgbl;
|
||||
pxcrb->reply_control_blk_addr = (void __user *) prepcblk;
|
||||
pxcrb->reply_control_blk_addr = (void __user *)prepcblk;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -345,7 +345,7 @@ int cca_genseckey(u16 cardnr, u16 domain,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with KG request */
|
||||
preqparm = (struct kgreqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct kgreqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "KG", 2);
|
||||
preqparm->rule_array_len = sizeof(preqparm->rule_array_len);
|
||||
preqparm->lv1.len = sizeof(struct lv1);
|
||||
@ -387,7 +387,7 @@ int cca_genseckey(u16 cardnr, u16 domain,
|
||||
rc = zcrypt_send_cprb(&xcrb);
|
||||
if (rc) {
|
||||
DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, errno %d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -395,16 +395,16 @@ int cca_genseckey(u16 cardnr, u16 domain,
|
||||
if (prepcblk->ccp_rtcode != 0) {
|
||||
DEBUG_ERR("%s secure key generate failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct kgrepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct kgrepparm *)ptr;
|
||||
|
||||
/* check length of the returned secure key token */
|
||||
seckeysize = prepparm->lv3.keyblock.toklen
|
||||
@ -419,7 +419,7 @@ int cca_genseckey(u16 cardnr, u16 domain,
|
||||
|
||||
/* check secure key token */
|
||||
rc = cca_check_secaeskeytoken(zcrypt_dbf_info, DBF_ERR,
|
||||
prepparm->lv3.keyblock.tok, 8*keysize);
|
||||
prepparm->lv3.keyblock.tok, 8 * keysize);
|
||||
if (rc) {
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
@ -486,7 +486,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with CM request */
|
||||
preqparm = (struct cmreqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct cmreqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "CM", 2);
|
||||
memcpy(preqparm->rule_array, "AES ", 8);
|
||||
preqparm->rule_array_len =
|
||||
@ -512,7 +512,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
|
||||
}
|
||||
preqparm->lv1.len = sizeof(struct lv1) + keysize;
|
||||
memcpy(preqparm->lv1.clrkey, clrkey, keysize);
|
||||
plv2 = (struct lv2 *) (((u8 *) &preqparm->lv2) + keysize);
|
||||
plv2 = (struct lv2 *)(((u8 *)&preqparm->lv2) + keysize);
|
||||
plv2->len = sizeof(struct lv2);
|
||||
plv2->keyid.len = sizeof(struct keyid);
|
||||
plv2->keyid.attr = 0x30;
|
||||
@ -525,7 +525,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
|
||||
rc = zcrypt_send_cprb(&xcrb);
|
||||
if (rc) {
|
||||
DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -533,16 +533,16 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
|
||||
if (prepcblk->ccp_rtcode != 0) {
|
||||
DEBUG_ERR("%s clear key import failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct cmrepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct cmrepparm *)ptr;
|
||||
|
||||
/* check length of the returned secure key token */
|
||||
seckeysize = prepparm->lv3.keyblock.toklen
|
||||
@ -557,7 +557,7 @@ int cca_clr2seckey(u16 cardnr, u16 domain, u32 keybitsize,
|
||||
|
||||
/* check secure key token */
|
||||
rc = cca_check_secaeskeytoken(zcrypt_dbf_info, DBF_ERR,
|
||||
prepparm->lv3.keyblock.tok, 8*keysize);
|
||||
prepparm->lv3.keyblock.tok, 8 * keysize);
|
||||
if (rc) {
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
@ -632,7 +632,7 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with USK request */
|
||||
preqparm = (struct uskreqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct uskreqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "US", 2);
|
||||
preqparm->rule_array_len = sizeof(preqparm->rule_array_len);
|
||||
preqparm->lv1.len = sizeof(struct lv1);
|
||||
@ -652,7 +652,7 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
|
||||
rc = zcrypt_send_cprb(&xcrb);
|
||||
if (rc) {
|
||||
DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -660,8 +660,8 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
|
||||
if (prepcblk->ccp_rtcode != 0) {
|
||||
DEBUG_ERR("%s unwrap secure key failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
if (prepcblk->ccp_rtcode == 8 && prepcblk->ccp_rscode == 2290)
|
||||
rc = -EAGAIN;
|
||||
else
|
||||
@ -671,37 +671,37 @@ int cca_sec2protkey(u16 cardnr, u16 domain,
|
||||
if (prepcblk->ccp_rscode != 0) {
|
||||
DEBUG_WARN("%s unwrap secure key warning, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct uskrepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct uskrepparm *)ptr;
|
||||
|
||||
/* check the returned keyblock */
|
||||
if (prepparm->lv3.ckb.version != 0x01 &&
|
||||
prepparm->lv3.ckb.version != 0x02) {
|
||||
DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x\n",
|
||||
__func__, (int) prepparm->lv3.ckb.version);
|
||||
__func__, (int)prepparm->lv3.ckb.version);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* copy the tanslated protected key */
|
||||
switch (prepparm->lv3.ckb.len) {
|
||||
case 16+32:
|
||||
case 16 + 32:
|
||||
/* AES 128 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_128;
|
||||
break;
|
||||
case 24+32:
|
||||
case 24 + 32:
|
||||
/* AES 192 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_192;
|
||||
break;
|
||||
case 32+32:
|
||||
case 32 + 32:
|
||||
/* AES 256 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_256;
|
||||
@ -751,7 +751,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
struct gkreqparm {
|
||||
u8 subfunc_code[2];
|
||||
u16 rule_array_len;
|
||||
char rule_array[2*8];
|
||||
char rule_array[2 * 8];
|
||||
struct {
|
||||
u16 len;
|
||||
u8 key_type_1[8];
|
||||
@ -827,10 +827,10 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
preqcblk->req_parml = sizeof(struct gkreqparm);
|
||||
|
||||
/* prepare request param block with GK request */
|
||||
preqparm = (struct gkreqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct gkreqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "GK", 2);
|
||||
preqparm->rule_array_len = sizeof(uint16_t) + 2 * 8;
|
||||
memcpy(preqparm->rule_array, "AES OP ", 2*8);
|
||||
memcpy(preqparm->rule_array, "AES OP ", 2 * 8);
|
||||
|
||||
/* prepare vud block */
|
||||
preqparm->vud.len = sizeof(preqparm->vud);
|
||||
@ -869,9 +869,9 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
|
||||
/* patch the skeleton key token export flags inside the kb block */
|
||||
if (keygenflags) {
|
||||
t = (struct cipherkeytoken *) preqparm->kb.tlv3.gen_key_id_1;
|
||||
t->kmf1 |= (u16) (keygenflags & 0x0000FF00);
|
||||
t->kmf1 &= (u16) ~(keygenflags & 0x000000FF);
|
||||
t = (struct cipherkeytoken *)preqparm->kb.tlv3.gen_key_id_1;
|
||||
t->kmf1 |= (u16)(keygenflags & 0x0000FF00);
|
||||
t->kmf1 &= (u16)~(keygenflags & 0x000000FF);
|
||||
}
|
||||
|
||||
/* prepare xcrb struct */
|
||||
@ -882,7 +882,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -891,16 +891,16 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
DEBUG_ERR(
|
||||
"%s cipher key generate failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct gkrepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct gkrepparm *)ptr;
|
||||
|
||||
/* do some plausibility checks on the key block */
|
||||
if (prepparm->kb.len < 120 + 5 * sizeof(uint16_t) ||
|
||||
@ -921,7 +921,7 @@ int cca_gencipherkey(u16 cardnr, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
}
|
||||
|
||||
/* copy the generated vlsc key token */
|
||||
t = (struct cipherkeytoken *) prepparm->kb.tlv1.gen_key;
|
||||
t = (struct cipherkeytoken *)prepparm->kb.tlv1.gen_key;
|
||||
if (keybuf) {
|
||||
if (*keybufsize >= t->len)
|
||||
memcpy(keybuf, t, t->len);
|
||||
@ -1006,7 +1006,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
|
||||
preqcblk->req_parml = 0;
|
||||
|
||||
/* prepare request param block with IP request */
|
||||
preq_ra_block = (struct rule_array_block __force *) preqcblk->req_parmb;
|
||||
preq_ra_block = (struct rule_array_block __force *)preqcblk->req_parmb;
|
||||
memcpy(preq_ra_block->subfunc_code, "IP", 2);
|
||||
preq_ra_block->rule_array_len = sizeof(uint16_t) + 2 * 8;
|
||||
memcpy(preq_ra_block->rule_array, rule_array_1, 8);
|
||||
@ -1050,7 +1050,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1059,16 +1059,16 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
|
||||
DEBUG_ERR(
|
||||
"%s CSNBKPI2 failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct iprepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct iprepparm *)ptr;
|
||||
|
||||
/* do some plausibility checks on the key block */
|
||||
if (prepparm->kb.len < 120 + 3 * sizeof(uint16_t) ||
|
||||
@ -1082,7 +1082,7 @@ static int _ip_cprb_helper(u16 cardnr, u16 domain,
|
||||
/* do not check the key here, it may be incomplete */
|
||||
|
||||
/* copy the vlsc key token back */
|
||||
t = (struct cipherkeytoken *) prepparm->kb.tlv1.key_token;
|
||||
t = (struct cipherkeytoken *)prepparm->kb.tlv1.key_token;
|
||||
memcpy(key_token, t, t->len);
|
||||
*key_token_size = t->len;
|
||||
|
||||
@ -1117,9 +1117,9 @@ int cca_clr2cipherkey(u16 card, u16 dom, u32 keybitsize, u32 keygenflags,
|
||||
|
||||
/* patch the skeleton key token export flags */
|
||||
if (keygenflags) {
|
||||
t = (struct cipherkeytoken *) token;
|
||||
t->kmf1 |= (u16) (keygenflags & 0x0000FF00);
|
||||
t->kmf1 &= (u16) ~(keygenflags & 0x000000FF);
|
||||
t = (struct cipherkeytoken *)token;
|
||||
t->kmf1 |= (u16)(keygenflags & 0x0000FF00);
|
||||
t->kmf1 &= (u16)~(keygenflags & 0x000000FF);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1241,7 +1241,7 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with AU request */
|
||||
preqparm = (struct aureqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct aureqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "AU", 2);
|
||||
preqparm->rule_array_len =
|
||||
sizeof(preqparm->rule_array_len)
|
||||
@ -1267,7 +1267,7 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1276,8 +1276,8 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
|
||||
DEBUG_ERR(
|
||||
"%s unwrap secure key failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
if (prepcblk->ccp_rtcode == 8 && prepcblk->ccp_rscode == 2290)
|
||||
rc = -EAGAIN;
|
||||
else
|
||||
@ -1288,44 +1288,44 @@ int cca_cipher2protkey(u16 cardnr, u16 domain, const u8 *ckey,
|
||||
DEBUG_WARN(
|
||||
"%s unwrap secure key warning, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct aurepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct aurepparm *)ptr;
|
||||
|
||||
/* check the returned keyblock */
|
||||
if (prepparm->vud.ckb.version != 0x01 &&
|
||||
prepparm->vud.ckb.version != 0x02) {
|
||||
DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x\n",
|
||||
__func__, (int) prepparm->vud.ckb.version);
|
||||
__func__, (int)prepparm->vud.ckb.version);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
if (prepparm->vud.ckb.algo != 0x02) {
|
||||
DEBUG_ERR(
|
||||
"%s reply param keyblock algo mismatch 0x%02x != 0x02\n",
|
||||
__func__, (int) prepparm->vud.ckb.algo);
|
||||
__func__, (int)prepparm->vud.ckb.algo);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* copy the translated protected key */
|
||||
switch (prepparm->vud.ckb.keylen) {
|
||||
case 16+32:
|
||||
case 16 + 32:
|
||||
/* AES 128 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_128;
|
||||
break;
|
||||
case 24+32:
|
||||
case 24 + 32:
|
||||
/* AES 192 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_192;
|
||||
break;
|
||||
case 32+32:
|
||||
case 32 + 32:
|
||||
/* AES 256 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_256;
|
||||
@ -1410,7 +1410,7 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with AU request */
|
||||
preqparm = (struct aureqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct aureqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "AU", 2);
|
||||
preqparm->rule_array_len =
|
||||
sizeof(preqparm->rule_array_len)
|
||||
@ -1436,7 +1436,7 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1445,8 +1445,8 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
|
||||
DEBUG_ERR(
|
||||
"%s unwrap secure key failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
if (prepcblk->ccp_rtcode == 8 && prepcblk->ccp_rscode == 2290)
|
||||
rc = -EAGAIN;
|
||||
else
|
||||
@ -1457,26 +1457,26 @@ int cca_ecc2protkey(u16 cardnr, u16 domain, const u8 *key,
|
||||
DEBUG_WARN(
|
||||
"%s unwrap secure key warning, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct aurepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct aurepparm *)ptr;
|
||||
|
||||
/* check the returned keyblock */
|
||||
if (prepparm->vud.ckb.version != 0x02) {
|
||||
DEBUG_ERR("%s reply param keyblock version mismatch 0x%02x != 0x02\n",
|
||||
__func__, (int) prepparm->vud.ckb.version);
|
||||
__func__, (int)prepparm->vud.ckb.version);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
if (prepparm->vud.ckb.algo != 0x81) {
|
||||
DEBUG_ERR(
|
||||
"%s reply param keyblock algo mismatch 0x%02x != 0x81\n",
|
||||
__func__, (int) prepparm->vud.ckb.algo);
|
||||
__func__, (int)prepparm->vud.ckb.algo);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
@ -1537,7 +1537,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
|
||||
preqcblk->domain = domain;
|
||||
|
||||
/* fill request cprb param block with FQ request */
|
||||
preqparm = (struct fqreqparm __force *) preqcblk->req_parmb;
|
||||
preqparm = (struct fqreqparm __force *)preqcblk->req_parmb;
|
||||
memcpy(preqparm->subfunc_code, "FQ", 2);
|
||||
memcpy(preqparm->rule_array, keyword, sizeof(preqparm->rule_array));
|
||||
preqparm->rule_array_len =
|
||||
@ -1553,7 +1553,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
|
||||
rc = zcrypt_send_cprb(&xcrb);
|
||||
if (rc) {
|
||||
DEBUG_ERR("%s zcrypt_send_cprb (cardnr=%d domain=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1561,20 +1561,20 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
|
||||
if (prepcblk->ccp_rtcode != 0) {
|
||||
DEBUG_ERR("%s unwrap secure key failure, card response %d/%d\n",
|
||||
__func__,
|
||||
(int) prepcblk->ccp_rtcode,
|
||||
(int) prepcblk->ccp_rscode);
|
||||
(int)prepcblk->ccp_rtcode,
|
||||
(int)prepcblk->ccp_rscode);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* process response cprb param block */
|
||||
ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *) ptr;
|
||||
prepparm = (struct fqrepparm *) ptr;
|
||||
ptr = ((u8 *)prepcblk) + sizeof(struct CPRBX);
|
||||
prepcblk->rpl_parmb = (u8 __user *)ptr;
|
||||
prepparm = (struct fqrepparm *)ptr;
|
||||
ptr = prepparm->lvdata;
|
||||
|
||||
/* check and possibly copy reply rule array */
|
||||
len = *((u16 *) ptr);
|
||||
len = *((u16 *)ptr);
|
||||
if (len > sizeof(u16)) {
|
||||
ptr += sizeof(u16);
|
||||
len -= sizeof(u16);
|
||||
@ -1585,7 +1585,7 @@ int cca_query_crypto_facility(u16 cardnr, u16 domain,
|
||||
ptr += len;
|
||||
}
|
||||
/* check and possible copy reply var array */
|
||||
len = *((u16 *) ptr);
|
||||
len = *((u16 *)ptr);
|
||||
if (len > sizeof(u16)) {
|
||||
ptr += sizeof(u16);
|
||||
len -= sizeof(u16);
|
||||
@ -1696,30 +1696,30 @@ static int fetch_cca_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
ci->hwtype = devstat.hwtype;
|
||||
|
||||
/* prep page for rule array and var array use */
|
||||
pg = (u8 *) __get_free_page(GFP_KERNEL);
|
||||
pg = (u8 *)__get_free_page(GFP_KERNEL);
|
||||
if (!pg)
|
||||
return -ENOMEM;
|
||||
rarray = pg;
|
||||
varray = pg + PAGE_SIZE/2;
|
||||
rlen = vlen = PAGE_SIZE/2;
|
||||
varray = pg + PAGE_SIZE / 2;
|
||||
rlen = vlen = PAGE_SIZE / 2;
|
||||
|
||||
/* QF for this card/domain */
|
||||
rc = cca_query_crypto_facility(cardnr, domain, "STATICSA",
|
||||
rarray, &rlen, varray, &vlen);
|
||||
if (rc == 0 && rlen >= 10*8 && vlen >= 204) {
|
||||
if (rc == 0 && rlen >= 10 * 8 && vlen >= 204) {
|
||||
memcpy(ci->serial, rarray, 8);
|
||||
ci->new_asym_mk_state = (char) rarray[4*8];
|
||||
ci->cur_asym_mk_state = (char) rarray[5*8];
|
||||
ci->old_asym_mk_state = (char) rarray[6*8];
|
||||
ci->new_asym_mk_state = (char)rarray[4 * 8];
|
||||
ci->cur_asym_mk_state = (char)rarray[5 * 8];
|
||||
ci->old_asym_mk_state = (char)rarray[6 * 8];
|
||||
if (ci->old_asym_mk_state == '2')
|
||||
memcpy(ci->old_asym_mkvp, varray + 64, 16);
|
||||
if (ci->cur_asym_mk_state == '2')
|
||||
memcpy(ci->cur_asym_mkvp, varray + 84, 16);
|
||||
if (ci->new_asym_mk_state == '3')
|
||||
memcpy(ci->new_asym_mkvp, varray + 104, 16);
|
||||
ci->new_aes_mk_state = (char) rarray[7*8];
|
||||
ci->cur_aes_mk_state = (char) rarray[8*8];
|
||||
ci->old_aes_mk_state = (char) rarray[9*8];
|
||||
ci->new_aes_mk_state = (char)rarray[7 * 8];
|
||||
ci->cur_aes_mk_state = (char)rarray[8 * 8];
|
||||
ci->old_aes_mk_state = (char)rarray[9 * 8];
|
||||
if (ci->old_aes_mk_state == '2')
|
||||
memcpy(&ci->old_aes_mkvp, varray + 172, 8);
|
||||
if (ci->cur_aes_mk_state == '2')
|
||||
@ -1730,13 +1730,13 @@ static int fetch_cca_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
}
|
||||
if (!found)
|
||||
goto out;
|
||||
rlen = vlen = PAGE_SIZE/2;
|
||||
rlen = vlen = PAGE_SIZE / 2;
|
||||
rc = cca_query_crypto_facility(cardnr, domain, "STATICSB",
|
||||
rarray, &rlen, varray, &vlen);
|
||||
if (rc == 0 && rlen >= 13*8 && vlen >= 240) {
|
||||
ci->new_apka_mk_state = (char) rarray[10*8];
|
||||
ci->cur_apka_mk_state = (char) rarray[11*8];
|
||||
ci->old_apka_mk_state = (char) rarray[12*8];
|
||||
if (rc == 0 && rlen >= 13 * 8 && vlen >= 240) {
|
||||
ci->new_apka_mk_state = (char)rarray[10 * 8];
|
||||
ci->cur_apka_mk_state = (char)rarray[11 * 8];
|
||||
ci->old_apka_mk_state = (char)rarray[12 * 8];
|
||||
if (ci->old_apka_mk_state == '2')
|
||||
memcpy(&ci->old_apka_mkvp, varray + 208, 8);
|
||||
if (ci->cur_apka_mk_state == '2')
|
||||
@ -1747,7 +1747,7 @@ static int fetch_cca_info(u16 cardnr, u16 domain, struct cca_info *ci)
|
||||
}
|
||||
|
||||
out:
|
||||
free_page((unsigned long) pg);
|
||||
free_page((unsigned long)pg);
|
||||
return found == 2 ? 0 : -ENOENT;
|
||||
}
|
||||
|
||||
@ -1855,8 +1855,9 @@ static int findcard(u64 mkvp, u16 *pcardnr, u16 *pdomain,
|
||||
if (pdomain)
|
||||
*pdomain = dom;
|
||||
rc = (i < MAX_ZDEV_ENTRIES_EXT ? 0 : 1);
|
||||
} else
|
||||
} else {
|
||||
rc = -ENODEV;
|
||||
}
|
||||
|
||||
kvfree(device_status);
|
||||
return rc;
|
||||
@ -1870,7 +1871,7 @@ int cca_findcard(const u8 *key, u16 *pcardnr, u16 *pdomain, int verify)
|
||||
{
|
||||
u64 mkvp;
|
||||
int minhwtype = 0;
|
||||
const struct keytoken_header *hdr = (struct keytoken_header *) key;
|
||||
const struct keytoken_header *hdr = (struct keytoken_header *)key;
|
||||
|
||||
if (hdr->type != TOKTYPE_CCA_INTERNAL)
|
||||
return -EINVAL;
|
||||
@ -1963,7 +1964,7 @@ int cca_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,
|
||||
}
|
||||
/* apqn passed all filtering criterons, add to the array */
|
||||
if (_nr_apqns < 256)
|
||||
_apqns[_nr_apqns++] = (((u16)card) << 16) | ((u16) dom);
|
||||
_apqns[_nr_apqns++] = (((u16)card) << 16) | ((u16)dom);
|
||||
}
|
||||
|
||||
/* nothing found ? */
|
||||
|
@ -34,10 +34,11 @@
|
||||
|
||||
#define CEX3A_MAX_RESPONSE_SIZE 0x210 /* 512 bit modulus
|
||||
* (max outputdatalength) +
|
||||
* type80_hdr*/
|
||||
* type80_hdr
|
||||
*/
|
||||
#define CEX3A_MAX_MESSAGE_SIZE sizeof(struct type50_crb3_msg)
|
||||
|
||||
#define CEX2A_CLEANUP_TIME (15*HZ)
|
||||
#define CEX2A_CLEANUP_TIME (15 * HZ)
|
||||
#define CEX3A_CLEANUP_TIME CEX2A_CLEANUP_TIME
|
||||
|
||||
MODULE_AUTHOR("IBM Corporation");
|
||||
@ -117,9 +118,8 @@ static int zcrypt_cex2a_card_probe(struct ap_device *ap_dev)
|
||||
zc->online = 1;
|
||||
|
||||
rc = zcrypt_card_register(zc);
|
||||
if (rc) {
|
||||
if (rc)
|
||||
zcrypt_card_free(zc);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -176,9 +176,8 @@ static int zcrypt_cex2a_queue_probe(struct ap_device *ap_dev)
|
||||
aq->request_timeout = CEX2A_CLEANUP_TIME;
|
||||
dev_set_drvdata(&ap_dev->device, zq);
|
||||
rc = zcrypt_queue_register(zq);
|
||||
if (rc) {
|
||||
if (rc)
|
||||
zcrypt_queue_free(zq);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -31,8 +31,8 @@
|
||||
#define CEX2C_MAX_MOD_SIZE 256 /* 2048 bits */
|
||||
#define CEX3C_MIN_MOD_SIZE 16 /* 128 bits */
|
||||
#define CEX3C_MAX_MOD_SIZE 512 /* 4096 bits */
|
||||
#define CEX2C_MAX_XCRB_MESSAGE_SIZE (12*1024)
|
||||
#define CEX2C_CLEANUP_TIME (15*HZ)
|
||||
#define CEX2C_MAX_XCRB_MESSAGE_SIZE (12 * 1024)
|
||||
#define CEX2C_CLEANUP_TIME (15 * HZ)
|
||||
|
||||
MODULE_AUTHOR("IBM Corporation");
|
||||
MODULE_DESCRIPTION("CEX2C/CEX3C Cryptographic Coprocessor device driver, " \
|
||||
@ -200,11 +200,11 @@ static int zcrypt_cex2c_rng_supported(struct ap_queue *aq)
|
||||
int rc, i;
|
||||
|
||||
ap_init_message(&ap_msg);
|
||||
ap_msg.msg = (void *) get_zeroed_page(GFP_KERNEL);
|
||||
ap_msg.msg = (void *)get_zeroed_page(GFP_KERNEL);
|
||||
if (!ap_msg.msg)
|
||||
return -ENOMEM;
|
||||
|
||||
rng_type6CPRB_msgX(&ap_msg, 4, &domain);
|
||||
rng_type6cprb_msgx(&ap_msg, 4, &domain);
|
||||
|
||||
msg = ap_msg.msg;
|
||||
msg->cprbx.domain = AP_QID_QUEUE(aq->qid);
|
||||
@ -233,7 +233,7 @@ static int zcrypt_cex2c_rng_supported(struct ap_queue *aq)
|
||||
else
|
||||
rc = 0;
|
||||
out_free:
|
||||
free_page((unsigned long) ap_msg.msg);
|
||||
free_page((unsigned long)ap_msg.msg);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@
|
||||
* But the maximum time limit managed by the stomper code is set to 60sec.
|
||||
* Hence we have to wait at least that time period.
|
||||
*/
|
||||
#define CEX4_CLEANUP_TIME (900*HZ)
|
||||
#define CEX4_CLEANUP_TIME (900 * HZ)
|
||||
|
||||
MODULE_AUTHOR("IBM Corporation");
|
||||
MODULE_DESCRIPTION("CEX[45678] Cryptographic Card device driver, " \
|
||||
@ -364,8 +364,9 @@ static ssize_t ep11_mkvps_show(struct device *dev,
|
||||
bin2hex(buf + n, di.cur_wkvp, sizeof(di.cur_wkvp));
|
||||
n += 2 * sizeof(di.cur_wkvp);
|
||||
n += scnprintf(buf + n, PAGE_SIZE - n, "\n");
|
||||
} else
|
||||
} else {
|
||||
n = scnprintf(buf, PAGE_SIZE, "WK CUR: - -\n");
|
||||
}
|
||||
|
||||
if (di.new_wk_state == '0') {
|
||||
n += scnprintf(buf + n, PAGE_SIZE - n, "WK NEW: %s -\n",
|
||||
@ -376,8 +377,9 @@ static ssize_t ep11_mkvps_show(struct device *dev,
|
||||
bin2hex(buf + n, di.new_wkvp, sizeof(di.new_wkvp));
|
||||
n += 2 * sizeof(di.new_wkvp);
|
||||
n += scnprintf(buf + n, PAGE_SIZE - n, "\n");
|
||||
} else
|
||||
} else {
|
||||
n += scnprintf(buf + n, PAGE_SIZE - n, "WK NEW: - -\n");
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
@ -119,8 +119,8 @@ static void __exit card_cache_free(void)
|
||||
int ep11_check_aes_key_with_hdr(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *key, size_t keylen, int checkcpacfexp)
|
||||
{
|
||||
struct ep11kblob_header *hdr = (struct ep11kblob_header *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) (key + sizeof(*hdr));
|
||||
struct ep11kblob_header *hdr = (struct ep11kblob_header *)key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)(key + sizeof(*hdr));
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
|
||||
@ -133,38 +133,38 @@ int ep11_check_aes_key_with_hdr(debug_info_t *dbg, int dbflvl,
|
||||
if (hdr->type != TOKTYPE_NON_CCA) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) hdr->type, TOKTYPE_NON_CCA);
|
||||
__func__, (int)hdr->type, TOKTYPE_NON_CCA);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->hver != 0x00) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header version 0x%02x != 0x00\n",
|
||||
__func__, (int) hdr->hver);
|
||||
__func__, (int)hdr->hver);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->version != TOKVER_EP11_AES_WITH_HEADER) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, version 0x%02x != 0x%02x\n",
|
||||
__func__, (int) hdr->version, TOKVER_EP11_AES_WITH_HEADER);
|
||||
__func__, (int)hdr->version, TOKVER_EP11_AES_WITH_HEADER);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->len > keylen) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d keylen %zu mismatch\n",
|
||||
__func__, (int) hdr->len, keylen);
|
||||
__func__, (int)hdr->len, keylen);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->len < sizeof(*hdr) + sizeof(*kb)) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d < %zu\n",
|
||||
__func__, (int) hdr->len, sizeof(*hdr) + sizeof(*kb));
|
||||
__func__, (int)hdr->len, sizeof(*hdr) + sizeof(*kb));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (kb->version != EP11_STRUCT_MAGIC) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, blob magic 0x%04x != 0x%04x\n",
|
||||
__func__, (int) kb->version, EP11_STRUCT_MAGIC);
|
||||
__func__, (int)kb->version, EP11_STRUCT_MAGIC);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (checkcpacfexp && !(kb->attr & EP11_BLOB_PKEY_EXTRACTABLE)) {
|
||||
@ -186,8 +186,8 @@ EXPORT_SYMBOL(ep11_check_aes_key_with_hdr);
|
||||
int ep11_check_ecc_key_with_hdr(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *key, size_t keylen, int checkcpacfexp)
|
||||
{
|
||||
struct ep11kblob_header *hdr = (struct ep11kblob_header *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) (key + sizeof(*hdr));
|
||||
struct ep11kblob_header *hdr = (struct ep11kblob_header *)key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)(key + sizeof(*hdr));
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
|
||||
@ -200,38 +200,38 @@ int ep11_check_ecc_key_with_hdr(debug_info_t *dbg, int dbflvl,
|
||||
if (hdr->type != TOKTYPE_NON_CCA) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) hdr->type, TOKTYPE_NON_CCA);
|
||||
__func__, (int)hdr->type, TOKTYPE_NON_CCA);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->hver != 0x00) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header version 0x%02x != 0x00\n",
|
||||
__func__, (int) hdr->hver);
|
||||
__func__, (int)hdr->hver);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->version != TOKVER_EP11_ECC_WITH_HEADER) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, version 0x%02x != 0x%02x\n",
|
||||
__func__, (int) hdr->version, TOKVER_EP11_ECC_WITH_HEADER);
|
||||
__func__, (int)hdr->version, TOKVER_EP11_ECC_WITH_HEADER);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->len > keylen) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d keylen %zu mismatch\n",
|
||||
__func__, (int) hdr->len, keylen);
|
||||
__func__, (int)hdr->len, keylen);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (hdr->len < sizeof(*hdr) + sizeof(*kb)) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d < %zu\n",
|
||||
__func__, (int) hdr->len, sizeof(*hdr) + sizeof(*kb));
|
||||
__func__, (int)hdr->len, sizeof(*hdr) + sizeof(*kb));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (kb->version != EP11_STRUCT_MAGIC) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, blob magic 0x%04x != 0x%04x\n",
|
||||
__func__, (int) kb->version, EP11_STRUCT_MAGIC);
|
||||
__func__, (int)kb->version, EP11_STRUCT_MAGIC);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (checkcpacfexp && !(kb->attr & EP11_BLOB_PKEY_EXTRACTABLE)) {
|
||||
@ -254,7 +254,7 @@ EXPORT_SYMBOL(ep11_check_ecc_key_with_hdr);
|
||||
int ep11_check_aes_key(debug_info_t *dbg, int dbflvl,
|
||||
const u8 *key, size_t keylen, int checkcpacfexp)
|
||||
{
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
#define DBF(...) debug_sprintf_event(dbg, dbflvl, ##__VA_ARGS__)
|
||||
|
||||
@ -267,32 +267,32 @@ int ep11_check_aes_key(debug_info_t *dbg, int dbflvl,
|
||||
if (kb->head.type != TOKTYPE_NON_CCA) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, type 0x%02x != 0x%02x\n",
|
||||
__func__, (int) kb->head.type, TOKTYPE_NON_CCA);
|
||||
__func__, (int)kb->head.type, TOKTYPE_NON_CCA);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (kb->head.version != TOKVER_EP11_AES) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, version 0x%02x != 0x%02x\n",
|
||||
__func__, (int) kb->head.version, TOKVER_EP11_AES);
|
||||
__func__, (int)kb->head.version, TOKVER_EP11_AES);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (kb->head.len > keylen) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d keylen %zu mismatch\n",
|
||||
__func__, (int) kb->head.len, keylen);
|
||||
__func__, (int)kb->head.len, keylen);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (kb->head.len < sizeof(*kb)) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, header len %d < %zu\n",
|
||||
__func__, (int) kb->head.len, sizeof(*kb));
|
||||
__func__, (int)kb->head.len, sizeof(*kb));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (kb->version != EP11_STRUCT_MAGIC) {
|
||||
if (dbg)
|
||||
DBF("%s key check failed, blob magic 0x%04x != 0x%04x\n",
|
||||
__func__, (int) kb->version, EP11_STRUCT_MAGIC);
|
||||
__func__, (int)kb->version, EP11_STRUCT_MAGIC);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (checkcpacfexp && !(kb->attr & EP11_BLOB_PKEY_EXTRACTABLE)) {
|
||||
@ -347,11 +347,11 @@ static int asn1tag_write(u8 *ptr, u8 tag, const u8 *pvalue, u16 valuelen)
|
||||
}
|
||||
if (valuelen > 127) {
|
||||
ptr[1] = 0x81;
|
||||
ptr[2] = (u8) valuelen;
|
||||
ptr[2] = (u8)valuelen;
|
||||
memcpy(ptr + 3, pvalue, valuelen);
|
||||
return 3 + valuelen;
|
||||
}
|
||||
ptr[1] = (u8) valuelen;
|
||||
ptr[1] = (u8)valuelen;
|
||||
memcpy(ptr + 2, pvalue, valuelen);
|
||||
return 2 + valuelen;
|
||||
}
|
||||
@ -389,11 +389,11 @@ static inline void prep_urb(struct ep11_urb *u,
|
||||
struct ep11_cprb *req, size_t req_len,
|
||||
struct ep11_cprb *rep, size_t rep_len)
|
||||
{
|
||||
u->targets = (u8 __user *) t;
|
||||
u->targets = (u8 __user *)t;
|
||||
u->targets_num = nt;
|
||||
u->req = (u8 __user *) req;
|
||||
u->req = (u8 __user *)req;
|
||||
u->req_len = req_len;
|
||||
u->resp = (u8 __user *) rep;
|
||||
u->resp = (u8 __user *)rep;
|
||||
u->resp_len = rep_len;
|
||||
}
|
||||
|
||||
@ -462,7 +462,6 @@ static int check_reply_pl(const u8 *pl, const char *func)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Helper function which does an ep11 query with given query type.
|
||||
*/
|
||||
@ -496,7 +495,7 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
|
||||
req = alloc_cprb(sizeof(struct ep11_info_req_pl));
|
||||
if (!req)
|
||||
goto out;
|
||||
req_pl = (struct ep11_info_req_pl *) (((u8 *) req) + sizeof(*req));
|
||||
req_pl = (struct ep11_info_req_pl *)(((u8 *)req) + sizeof(*req));
|
||||
prep_head(&req_pl->head, sizeof(*req_pl), api, 38); /* get xcp info */
|
||||
req_pl->query_type_tag = 0x04;
|
||||
req_pl->query_type_len = sizeof(u32);
|
||||
@ -508,10 +507,10 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
|
||||
rep = alloc_cprb(sizeof(struct ep11_info_rep_pl) + buflen);
|
||||
if (!rep)
|
||||
goto out;
|
||||
rep_pl = (struct ep11_info_rep_pl *) (((u8 *) rep) + sizeof(*rep));
|
||||
rep_pl = (struct ep11_info_rep_pl *)(((u8 *)rep) + sizeof(*rep));
|
||||
|
||||
/* urb and target */
|
||||
urb = kmalloc(sizeof(struct ep11_urb), GFP_KERNEL);
|
||||
urb = kmalloc(sizeof(*urb), GFP_KERNEL);
|
||||
if (!urb)
|
||||
goto out;
|
||||
target.ap_id = cardnr;
|
||||
@ -524,7 +523,7 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
|
||||
__func__, (int) cardnr, (int) domain, rc);
|
||||
__func__, (int)cardnr, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -543,7 +542,7 @@ static int ep11_query_info(u16 cardnr, u16 domain, u32 query_type,
|
||||
goto out;
|
||||
}
|
||||
|
||||
memcpy(buf, ((u8 *) rep_pl) + sizeof(*rep_pl), rep_pl->data_len);
|
||||
memcpy(buf, ((u8 *)rep_pl) + sizeof(*rep_pl), rep_pl->data_len);
|
||||
|
||||
out:
|
||||
kfree(req);
|
||||
@ -592,7 +591,7 @@ int ep11_get_card_info(u16 card, struct ep11_card_info *info, int verify)
|
||||
return -ENOMEM;
|
||||
rc = ep11_query_info(card, AUTOSEL_DOM,
|
||||
0x01 /* module info query */,
|
||||
sizeof(*pmqi), (u8 *) pmqi);
|
||||
sizeof(*pmqi), (u8 *)pmqi);
|
||||
if (rc) {
|
||||
if (rc == -ENODEV)
|
||||
card_cache_scrub(card);
|
||||
@ -632,7 +631,7 @@ int ep11_get_domain_info(u16 card, u16 domain, struct ep11_domain_info *info)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = ep11_query_info(card, domain, 0x03 /* domain info query */,
|
||||
sizeof(*p_dom_info), (u8 *) p_dom_info);
|
||||
sizeof(*p_dom_info), (u8 *)p_dom_info);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
@ -644,8 +643,8 @@ int ep11_get_domain_info(u16 card, u16 domain, struct ep11_domain_info *info)
|
||||
info->cur_wk_state = '1';
|
||||
memcpy(info->cur_wkvp, p_dom_info->cur_WK_VP, 32);
|
||||
}
|
||||
if (p_dom_info->dom_flags & 0x04 /* new wk present */
|
||||
|| p_dom_info->dom_flags & 0x08 /* new wk committed */) {
|
||||
if (p_dom_info->dom_flags & 0x04 || /* new wk present */
|
||||
p_dom_info->dom_flags & 0x08 /* new wk committed */) {
|
||||
info->new_wk_state =
|
||||
p_dom_info->dom_flags & 0x08 ? '2' : '1';
|
||||
memcpy(info->new_wkvp, p_dom_info->new_WK_VP, 32);
|
||||
@ -722,7 +721,7 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
req = alloc_cprb(sizeof(struct keygen_req_pl));
|
||||
if (!req)
|
||||
goto out;
|
||||
req_pl = (struct keygen_req_pl *) (((u8 *) req) + sizeof(*req));
|
||||
req_pl = (struct keygen_req_pl *)(((u8 *)req) + sizeof(*req));
|
||||
api = (!keygenflags || keygenflags & 0x00200000) ? 4 : 1;
|
||||
prep_head(&req_pl->head, sizeof(*req_pl), api, 21); /* GenerateKey */
|
||||
req_pl->var_tag = 0x04;
|
||||
@ -746,10 +745,10 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
rep = alloc_cprb(sizeof(struct keygen_rep_pl));
|
||||
if (!rep)
|
||||
goto out;
|
||||
rep_pl = (struct keygen_rep_pl *) (((u8 *) rep) + sizeof(*rep));
|
||||
rep_pl = (struct keygen_rep_pl *)(((u8 *)rep) + sizeof(*rep));
|
||||
|
||||
/* urb and target */
|
||||
urb = kmalloc(sizeof(struct ep11_urb), GFP_KERNEL);
|
||||
urb = kmalloc(sizeof(*urb), GFP_KERNEL);
|
||||
if (!urb)
|
||||
goto out;
|
||||
target.ap_id = card;
|
||||
@ -762,7 +761,7 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
|
||||
__func__, (int) card, (int) domain, rc);
|
||||
__func__, (int)card, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -784,7 +783,7 @@ int ep11_genaeskey(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
/* copy key blob and set header values */
|
||||
memcpy(keybuf, rep_pl->data, rep_pl->data_len);
|
||||
*keybufsize = rep_pl->data_len;
|
||||
kb = (struct ep11keyblob *) keybuf;
|
||||
kb = (struct ep11keyblob *)keybuf;
|
||||
kb->head.type = TOKTYPE_NON_CCA;
|
||||
kb->head.len = rep_pl->data_len;
|
||||
kb->head.version = TOKVER_EP11_AES;
|
||||
@ -844,7 +843,7 @@ static int ep11_cryptsingle(u16 card, u16 domain,
|
||||
req = alloc_cprb(req_pl_size);
|
||||
if (!req)
|
||||
goto out;
|
||||
req_pl = (struct crypt_req_pl *) (((u8 *) req) + sizeof(*req));
|
||||
req_pl = (struct crypt_req_pl *)(((u8 *)req) + sizeof(*req));
|
||||
prep_head(&req_pl->head, req_pl_size, api, (mode ? 20 : 19));
|
||||
req_pl->var_tag = 0x04;
|
||||
req_pl->var_len = sizeof(u32);
|
||||
@ -852,7 +851,7 @@ static int ep11_cryptsingle(u16 card, u16 domain,
|
||||
req_pl->mech_tag = 0x04;
|
||||
req_pl->mech_len = sizeof(u32) + (iv ? 16 : 0);
|
||||
req_pl->mech = (mech ? mech : 0x00001085); /* CKM_AES_CBC_PAD */
|
||||
p = ((u8 *) req_pl) + sizeof(*req_pl);
|
||||
p = ((u8 *)req_pl) + sizeof(*req_pl);
|
||||
if (iv) {
|
||||
memcpy(p, iv, 16);
|
||||
p += 16;
|
||||
@ -866,10 +865,10 @@ static int ep11_cryptsingle(u16 card, u16 domain,
|
||||
rep = alloc_cprb(rep_pl_size);
|
||||
if (!rep)
|
||||
goto out;
|
||||
rep_pl = (struct crypt_rep_pl *) (((u8 *) rep) + sizeof(*rep));
|
||||
rep_pl = (struct crypt_rep_pl *)(((u8 *)rep) + sizeof(*rep));
|
||||
|
||||
/* urb and target */
|
||||
urb = kmalloc(sizeof(struct ep11_urb), GFP_KERNEL);
|
||||
urb = kmalloc(sizeof(*urb), GFP_KERNEL);
|
||||
if (!urb)
|
||||
goto out;
|
||||
target.ap_id = card;
|
||||
@ -882,7 +881,7 @@ static int ep11_cryptsingle(u16 card, u16 domain,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
|
||||
__func__, (int) card, (int) domain, rc);
|
||||
__func__, (int)card, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -894,13 +893,13 @@ static int ep11_cryptsingle(u16 card, u16 domain,
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
p = ((u8 *) rep_pl) + sizeof(*rep_pl);
|
||||
if (rep_pl->data_lenfmt <= 127)
|
||||
p = ((u8 *)rep_pl) + sizeof(*rep_pl);
|
||||
if (rep_pl->data_lenfmt <= 127) {
|
||||
n = rep_pl->data_lenfmt;
|
||||
else if (rep_pl->data_lenfmt == 0x81)
|
||||
} else if (rep_pl->data_lenfmt == 0x81) {
|
||||
n = *p++;
|
||||
else if (rep_pl->data_lenfmt == 0x82) {
|
||||
n = *((u16 *) p);
|
||||
} else if (rep_pl->data_lenfmt == 0x82) {
|
||||
n = *((u16 *)p);
|
||||
p += 2;
|
||||
} else {
|
||||
DEBUG_ERR("%s unknown reply data length format 0x%02hhx\n",
|
||||
@ -978,7 +977,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
|
||||
req = alloc_cprb(req_pl_size);
|
||||
if (!req)
|
||||
goto out;
|
||||
req_pl = (struct uw_req_pl *) (((u8 *) req) + sizeof(*req));
|
||||
req_pl = (struct uw_req_pl *)(((u8 *)req) + sizeof(*req));
|
||||
api = (!keygenflags || keygenflags & 0x00200000) ? 4 : 1;
|
||||
prep_head(&req_pl->head, req_pl_size, api, 34); /* UnwrapKey */
|
||||
req_pl->attr_tag = 0x04;
|
||||
@ -994,7 +993,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
|
||||
req_pl->mech_tag = 0x04;
|
||||
req_pl->mech_len = sizeof(u32) + (iv ? 16 : 0);
|
||||
req_pl->mech = (mech ? mech : 0x00001085); /* CKM_AES_CBC_PAD */
|
||||
p = ((u8 *) req_pl) + sizeof(*req_pl);
|
||||
p = ((u8 *)req_pl) + sizeof(*req_pl);
|
||||
if (iv) {
|
||||
memcpy(p, iv, 16);
|
||||
p += 16;
|
||||
@ -1014,10 +1013,10 @@ static int ep11_unwrapkey(u16 card, u16 domain,
|
||||
rep = alloc_cprb(sizeof(struct uw_rep_pl));
|
||||
if (!rep)
|
||||
goto out;
|
||||
rep_pl = (struct uw_rep_pl *) (((u8 *) rep) + sizeof(*rep));
|
||||
rep_pl = (struct uw_rep_pl *)(((u8 *)rep) + sizeof(*rep));
|
||||
|
||||
/* urb and target */
|
||||
urb = kmalloc(sizeof(struct ep11_urb), GFP_KERNEL);
|
||||
urb = kmalloc(sizeof(*urb), GFP_KERNEL);
|
||||
if (!urb)
|
||||
goto out;
|
||||
target.ap_id = card;
|
||||
@ -1030,7 +1029,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
|
||||
__func__, (int) card, (int) domain, rc);
|
||||
__func__, (int)card, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1052,7 +1051,7 @@ static int ep11_unwrapkey(u16 card, u16 domain,
|
||||
/* copy key blob and set header values */
|
||||
memcpy(keybuf, rep_pl->data, rep_pl->data_len);
|
||||
*keybufsize = rep_pl->data_len;
|
||||
kb = (struct ep11keyblob *) keybuf;
|
||||
kb = (struct ep11keyblob *)keybuf;
|
||||
kb->head.type = TOKTYPE_NON_CCA;
|
||||
kb->head.len = rep_pl->data_len;
|
||||
kb->head.version = TOKVER_EP11_AES;
|
||||
@ -1105,7 +1104,7 @@ static int ep11_wrapkey(u16 card, u16 domain,
|
||||
u8 *p;
|
||||
|
||||
/* maybe the session field holds a header with key info */
|
||||
kb = (struct ep11keyblob *) key;
|
||||
kb = (struct ep11keyblob *)key;
|
||||
if (kb->head.type == TOKTYPE_NON_CCA &&
|
||||
kb->head.version == TOKVER_EP11_AES) {
|
||||
has_header = true;
|
||||
@ -1120,7 +1119,7 @@ static int ep11_wrapkey(u16 card, u16 domain,
|
||||
goto out;
|
||||
if (!mech || mech == 0x80060001)
|
||||
req->flags |= 0x20; /* CPACF_WRAP needs special bit */
|
||||
req_pl = (struct wk_req_pl *) (((u8 *) req) + sizeof(*req));
|
||||
req_pl = (struct wk_req_pl *)(((u8 *)req) + sizeof(*req));
|
||||
api = (!mech || mech == 0x80060001) ? 4 : 1; /* CKM_IBM_CPACF_WRAP */
|
||||
prep_head(&req_pl->head, req_pl_size, api, 33); /* WrapKey */
|
||||
req_pl->var_tag = 0x04;
|
||||
@ -1129,7 +1128,7 @@ static int ep11_wrapkey(u16 card, u16 domain,
|
||||
req_pl->mech_tag = 0x04;
|
||||
req_pl->mech_len = sizeof(u32) + (iv ? 16 : 0);
|
||||
req_pl->mech = (mech ? mech : 0x80060001); /* CKM_IBM_CPACF_WRAP */
|
||||
p = ((u8 *) req_pl) + sizeof(*req_pl);
|
||||
p = ((u8 *)req_pl) + sizeof(*req_pl);
|
||||
if (iv) {
|
||||
memcpy(p, iv, 16);
|
||||
p += 16;
|
||||
@ -1152,10 +1151,10 @@ static int ep11_wrapkey(u16 card, u16 domain,
|
||||
rep = alloc_cprb(sizeof(struct wk_rep_pl));
|
||||
if (!rep)
|
||||
goto out;
|
||||
rep_pl = (struct wk_rep_pl *) (((u8 *) rep) + sizeof(*rep));
|
||||
rep_pl = (struct wk_rep_pl *)(((u8 *)rep) + sizeof(*rep));
|
||||
|
||||
/* urb and target */
|
||||
urb = kmalloc(sizeof(struct ep11_urb), GFP_KERNEL);
|
||||
urb = kmalloc(sizeof(*urb), GFP_KERNEL);
|
||||
if (!urb)
|
||||
goto out;
|
||||
target.ap_id = card;
|
||||
@ -1168,7 +1167,7 @@ static int ep11_wrapkey(u16 card, u16 domain,
|
||||
if (rc) {
|
||||
DEBUG_ERR(
|
||||
"%s zcrypt_send_ep11_cprb(card=%d dom=%d) failed, rc=%d\n",
|
||||
__func__, (int) card, (int) domain, rc);
|
||||
__func__, (int)card, (int)domain, rc);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1206,9 +1205,9 @@ int ep11_clr2keyblob(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
u8 encbuf[64], *kek = NULL;
|
||||
size_t clrkeylen, keklen, encbuflen = sizeof(encbuf);
|
||||
|
||||
if (keybitsize == 128 || keybitsize == 192 || keybitsize == 256)
|
||||
if (keybitsize == 128 || keybitsize == 192 || keybitsize == 256) {
|
||||
clrkeylen = keybitsize / 8;
|
||||
else {
|
||||
} else {
|
||||
DEBUG_ERR(
|
||||
"%s unknown/unsupported keybitsize %d\n",
|
||||
__func__, keybitsize);
|
||||
@ -1233,7 +1232,7 @@ int ep11_clr2keyblob(u16 card, u16 domain, u32 keybitsize, u32 keygenflags,
|
||||
__func__, rc);
|
||||
goto out;
|
||||
}
|
||||
kb = (struct ep11keyblob *) kek;
|
||||
kb = (struct ep11keyblob *)kek;
|
||||
memset(&kb->head, 0, sizeof(kb->head));
|
||||
|
||||
/* Step 2: encrypt clear key value with the kek key */
|
||||
@ -1282,17 +1281,17 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
|
||||
struct ep11kblob_header *hdr;
|
||||
|
||||
/* key with or without header ? */
|
||||
hdr = (struct ep11kblob_header *) keyblob;
|
||||
if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& (hdr->version == TOKVER_EP11_AES_WITH_HEADER
|
||||
|| hdr->version == TOKVER_EP11_ECC_WITH_HEADER)
|
||||
&& is_ep11_keyblob(keyblob + sizeof(struct ep11kblob_header))) {
|
||||
hdr = (struct ep11kblob_header *)keyblob;
|
||||
if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
(hdr->version == TOKVER_EP11_AES_WITH_HEADER ||
|
||||
hdr->version == TOKVER_EP11_ECC_WITH_HEADER) &&
|
||||
is_ep11_keyblob(keyblob + sizeof(struct ep11kblob_header))) {
|
||||
/* EP11 AES or ECC key with header */
|
||||
key = keyblob + sizeof(struct ep11kblob_header);
|
||||
keylen = hdr->len - sizeof(struct ep11kblob_header);
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA
|
||||
&& hdr->version == TOKVER_EP11_AES
|
||||
&& is_ep11_keyblob(keyblob)) {
|
||||
} else if (hdr->type == TOKTYPE_NON_CCA &&
|
||||
hdr->version == TOKVER_EP11_AES &&
|
||||
is_ep11_keyblob(keyblob)) {
|
||||
/* EP11 AES key (old style) */
|
||||
key = keyblob;
|
||||
keylen = hdr->len;
|
||||
@ -1300,8 +1299,9 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
|
||||
/* raw EP11 key blob */
|
||||
key = keyblob;
|
||||
keylen = keybloblen;
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* alloc temp working buffer */
|
||||
wkbuflen = (keylen + AES_BLOCK_SIZE) & (~(AES_BLOCK_SIZE - 1));
|
||||
@ -1318,12 +1318,12 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
|
||||
__func__, rc);
|
||||
goto out;
|
||||
}
|
||||
wki = (struct wk_info *) wkbuf;
|
||||
wki = (struct wk_info *)wkbuf;
|
||||
|
||||
/* check struct version and pkey type */
|
||||
if (wki->version != 1 || wki->pkeytype < 1 || wki->pkeytype > 5) {
|
||||
DEBUG_ERR("%s wk info version %d or pkeytype %d mismatch.\n",
|
||||
__func__, (int) wki->version, (int) wki->pkeytype);
|
||||
__func__, (int)wki->version, (int)wki->pkeytype);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
@ -1332,24 +1332,24 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
|
||||
switch (wki->pkeytype) {
|
||||
case 1: /* AES */
|
||||
switch (wki->pkeysize) {
|
||||
case 16+32:
|
||||
case 16 + 32:
|
||||
/* AES 128 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_128;
|
||||
break;
|
||||
case 24+32:
|
||||
case 24 + 32:
|
||||
/* AES 192 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_192;
|
||||
break;
|
||||
case 32+32:
|
||||
case 32 + 32:
|
||||
/* AES 256 protected key */
|
||||
if (protkeytype)
|
||||
*protkeytype = PKEY_KEYTYPE_AES_256;
|
||||
break;
|
||||
default:
|
||||
DEBUG_ERR("%s unknown/unsupported AES pkeysize %d\n",
|
||||
__func__, (int) wki->pkeysize);
|
||||
__func__, (int)wki->pkeysize);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
@ -1363,7 +1363,7 @@ int ep11_kblob2protkey(u16 card, u16 dom, const u8 *keyblob, size_t keybloblen,
|
||||
case 2: /* TDES */
|
||||
default:
|
||||
DEBUG_ERR("%s unknown/unsupported key type %d\n",
|
||||
__func__, (int) wki->pkeytype);
|
||||
__func__, (int)wki->pkeytype);
|
||||
rc = -EIO;
|
||||
goto out;
|
||||
}
|
||||
@ -1445,7 +1445,7 @@ int ep11_findcard2(u32 **apqns, u32 *nr_apqns, u16 cardnr, u16 domain,
|
||||
}
|
||||
/* apqn passed all filtering criterons, add to the array */
|
||||
if (_nr_apqns < 256)
|
||||
_apqns[_nr_apqns++] = (((u16)card) << 16) | ((u16) dom);
|
||||
_apqns[_nr_apqns++] = (((u16)card) << 16) | ((u16)dom);
|
||||
}
|
||||
|
||||
/* nothing found ? */
|
||||
|
@ -50,7 +50,7 @@ struct ep11keyblob {
|
||||
/* check ep11 key magic to find out if this is an ep11 key blob */
|
||||
static inline bool is_ep11_keyblob(const u8 *key)
|
||||
{
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *) key;
|
||||
struct ep11keyblob *kb = (struct ep11keyblob *)key;
|
||||
|
||||
return (kb->version == EP11_STRUCT_MAGIC);
|
||||
}
|
||||
|
@ -121,10 +121,11 @@ static inline int convert_error(struct zcrypt_queue *zq,
|
||||
ZCRYPT_DBF_WARN(
|
||||
"%s dev=%02x.%04x RY=0x%02x apfs=0x%x => bus rescan, rc=EAGAIN\n",
|
||||
__func__, card, queue, ehdr->reply_code, apfs);
|
||||
} else
|
||||
} else {
|
||||
ZCRYPT_DBF_WARN("%s dev=%02x.%04x RY=0x%02x => bus rescan, rc=EAGAIN\n",
|
||||
__func__, card, queue,
|
||||
ehdr->reply_code);
|
||||
}
|
||||
return -EAGAIN;
|
||||
default:
|
||||
/* Assume request is valid and a retry will be worth it */
|
||||
|
@ -158,7 +158,6 @@ struct type80_hdr {
|
||||
|
||||
int get_rsa_modex_fc(struct ica_rsa_modexpo *mex, int *fcode)
|
||||
{
|
||||
|
||||
if (!mex->inputdatalength)
|
||||
return -EINVAL;
|
||||
|
||||
@ -174,7 +173,6 @@ int get_rsa_modex_fc(struct ica_rsa_modexpo *mex, int *fcode)
|
||||
|
||||
int get_rsa_crt_fc(struct ica_rsa_modexpo_crt *crt, int *fcode)
|
||||
{
|
||||
|
||||
if (!crt->inputdatalength)
|
||||
return -EINVAL;
|
||||
|
||||
@ -239,8 +237,9 @@ static int ICAMEX_msg_to_type50MEX_msg(struct zcrypt_queue *zq,
|
||||
mod = meb3->modulus + sizeof(meb3->modulus) - mod_len;
|
||||
exp = meb3->exponent + sizeof(meb3->exponent) - mod_len;
|
||||
inp = meb3->message + sizeof(meb3->message) - mod_len;
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (copy_from_user(mod, mex->n_modulus, mod_len) ||
|
||||
copy_from_user(exp, mex->b_key, mod_len) ||
|
||||
@ -323,8 +322,9 @@ static int ICACRT_msg_to_type50CRT_msg(struct zcrypt_queue *zq,
|
||||
dq = crb3->dq + sizeof(crb3->dq) - short_len;
|
||||
u = crb3->u + sizeof(crb3->u) - short_len;
|
||||
inp = crb3->message + sizeof(crb3->message) - mod_len;
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* correct the offset of p, bp and mult_inv according zcrypt.h
|
||||
@ -392,7 +392,7 @@ static int convert_response_cex2a(struct zcrypt_queue *zq,
|
||||
unsigned int outputdatalength)
|
||||
{
|
||||
/* Response type byte is the second byte in the response. */
|
||||
unsigned char rtype = ((unsigned char *) reply->msg)[1];
|
||||
unsigned char rtype = ((unsigned char *)reply->msg)[1];
|
||||
|
||||
switch (rtype) {
|
||||
case TYPE82_RSP_CODE:
|
||||
@ -406,11 +406,11 @@ static int convert_response_cex2a(struct zcrypt_queue *zq,
|
||||
pr_err("Crypto dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) rtype);
|
||||
(int)rtype);
|
||||
ZCRYPT_DBF_ERR(
|
||||
"%s dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid), (int) rtype);
|
||||
AP_QID_QUEUE(zq->queue->qid), (int)rtype);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
@ -447,10 +447,11 @@ static void zcrypt_cex2a_receive(struct ap_queue *aq,
|
||||
memcpy(msg->msg, reply->msg, len);
|
||||
msg->len = len;
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
memcpy(msg->msg, reply->msg, sizeof(error_reply));
|
||||
}
|
||||
out:
|
||||
complete((struct completion *) msg->private);
|
||||
complete((struct completion *)msg->private);
|
||||
}
|
||||
|
||||
static atomic_t zcrypt_step = ATOMIC_INIT(0);
|
||||
@ -475,7 +476,7 @@ static long zcrypt_cex2a_modexpo(struct zcrypt_queue *zq,
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->receive = zcrypt_cex2a_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = &work;
|
||||
rc = ICAMEX_msg_to_type50MEX_msg(zq, ap_msg, mex);
|
||||
@ -492,9 +493,11 @@ static long zcrypt_cex2a_modexpo(struct zcrypt_queue *zq,
|
||||
rc = convert_response_cex2a(zq, ap_msg,
|
||||
mex->outputdata,
|
||||
mex->outputdatalength);
|
||||
} else
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out:
|
||||
ap_msg->private = NULL;
|
||||
if (rc)
|
||||
@ -524,7 +527,7 @@ static long zcrypt_cex2a_modexpo_crt(struct zcrypt_queue *zq,
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->receive = zcrypt_cex2a_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = &work;
|
||||
rc = ICACRT_msg_to_type50CRT_msg(zq, ap_msg, crt);
|
||||
@ -541,9 +544,11 @@ static long zcrypt_cex2a_modexpo_crt(struct zcrypt_queue *zq,
|
||||
rc = convert_response_cex2a(zq, ap_msg,
|
||||
crt->outputdata,
|
||||
crt->outputdatalength);
|
||||
} else
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out:
|
||||
ap_msg->private = NULL;
|
||||
if (rc)
|
||||
|
@ -29,12 +29,13 @@
|
||||
|
||||
#define CEXXC_MAX_ICA_RESPONSE_SIZE 0x77c /* max size type86 v2 reply */
|
||||
|
||||
#define CEIL4(x) ((((x)+3)/4)*4)
|
||||
#define CEIL4(x) ((((x) + 3) / 4) * 4)
|
||||
|
||||
struct response_type {
|
||||
struct completion work;
|
||||
int type;
|
||||
};
|
||||
|
||||
#define CEXXC_RESPONSE_TYPE_ICA 0
|
||||
#define CEXXC_RESPONSE_TYPE_XCRB 1
|
||||
#define CEXXC_RESPONSE_TYPE_EP11 2
|
||||
@ -178,7 +179,6 @@ int speed_idx_ep11(int req_type)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Convert a ICAMEX message to a type6 MEX message.
|
||||
*
|
||||
@ -188,7 +188,7 @@ int speed_idx_ep11(int req_type)
|
||||
*
|
||||
* Returns 0 on success or negative errno value.
|
||||
*/
|
||||
static int ICAMEX_msg_to_type6MEX_msgX(struct zcrypt_queue *zq,
|
||||
static int icamex_msg_to_type6mex_msgx(struct zcrypt_queue *zq,
|
||||
struct ap_message *ap_msg,
|
||||
struct ica_rsa_modexpo *mex)
|
||||
{
|
||||
@ -226,19 +226,19 @@ static int ICAMEX_msg_to_type6MEX_msgX(struct zcrypt_queue *zq,
|
||||
return -EFAULT;
|
||||
|
||||
/* Set up key which is located after the variable length text. */
|
||||
size = zcrypt_type6_mex_key_en(mex, msg->text+mex->inputdatalength);
|
||||
size = zcrypt_type6_mex_key_en(mex, msg->text + mex->inputdatalength);
|
||||
if (size < 0)
|
||||
return size;
|
||||
size += sizeof(*msg) + mex->inputdatalength;
|
||||
|
||||
/* message header, cprbx and f&r */
|
||||
msg->hdr = static_type6_hdrX;
|
||||
msg->hdr.ToCardLen1 = size - sizeof(msg->hdr);
|
||||
msg->hdr.FromCardLen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
|
||||
msg->hdr.tocardlen1 = size - sizeof(msg->hdr);
|
||||
msg->hdr.fromcardlen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
|
||||
|
||||
msg->cprbx = static_cprbx;
|
||||
msg->cprbx.domain = AP_QID_QUEUE(zq->queue->qid);
|
||||
msg->cprbx.rpl_msgbl = msg->hdr.FromCardLen1;
|
||||
msg->cprbx.rpl_msgbl = msg->hdr.fromcardlen1;
|
||||
|
||||
msg->fr = static_pke_fnr;
|
||||
|
||||
@ -257,7 +257,7 @@ static int ICAMEX_msg_to_type6MEX_msgX(struct zcrypt_queue *zq,
|
||||
*
|
||||
* Returns 0 on success or negative errno value.
|
||||
*/
|
||||
static int ICACRT_msg_to_type6CRT_msgX(struct zcrypt_queue *zq,
|
||||
static int icacrt_msg_to_type6crt_msgx(struct zcrypt_queue *zq,
|
||||
struct ap_message *ap_msg,
|
||||
struct ica_rsa_modexpo_crt *crt)
|
||||
{
|
||||
@ -303,8 +303,8 @@ static int ICACRT_msg_to_type6CRT_msgX(struct zcrypt_queue *zq,
|
||||
|
||||
/* message header, cprbx and f&r */
|
||||
msg->hdr = static_type6_hdrX;
|
||||
msg->hdr.ToCardLen1 = size - sizeof(msg->hdr);
|
||||
msg->hdr.FromCardLen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
|
||||
msg->hdr.tocardlen1 = size - sizeof(msg->hdr);
|
||||
msg->hdr.fromcardlen1 = CEXXC_MAX_ICA_RESPONSE_SIZE - sizeof(msg->hdr);
|
||||
|
||||
msg->cprbx = static_cprbx;
|
||||
msg->cprbx.domain = AP_QID_QUEUE(zq->queue->qid);
|
||||
@ -331,8 +331,8 @@ struct type86_fmt2_msg {
|
||||
struct type86_fmt2_ext fmt2;
|
||||
} __packed;
|
||||
|
||||
static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
|
||||
struct ica_xcRB *xcRB,
|
||||
static int xcrb_msg_to_type6cprb_msgx(bool userspace, struct ap_message *ap_msg,
|
||||
struct ica_xcRB *xcrb,
|
||||
unsigned int *fcode,
|
||||
unsigned short **dom)
|
||||
{
|
||||
@ -345,19 +345,19 @@ static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
|
||||
struct CPRBX cprbx;
|
||||
} __packed * msg = ap_msg->msg;
|
||||
|
||||
int rcblen = CEIL4(xcRB->request_control_blk_length);
|
||||
int rcblen = CEIL4(xcrb->request_control_blk_length);
|
||||
int req_sumlen, resp_sumlen;
|
||||
char *req_data = ap_msg->msg + sizeof(struct type6_hdr) + rcblen;
|
||||
char *function_code;
|
||||
|
||||
if (CEIL4(xcRB->request_control_blk_length) <
|
||||
xcRB->request_control_blk_length)
|
||||
if (CEIL4(xcrb->request_control_blk_length) <
|
||||
xcrb->request_control_blk_length)
|
||||
return -EINVAL; /* overflow after alignment*/
|
||||
|
||||
/* length checks */
|
||||
ap_msg->len = sizeof(struct type6_hdr) +
|
||||
CEIL4(xcRB->request_control_blk_length) +
|
||||
xcRB->request_data_length;
|
||||
CEIL4(xcrb->request_control_blk_length) +
|
||||
xcrb->request_data_length;
|
||||
if (ap_msg->len > ap_msg->bufsize)
|
||||
return -EINVAL;
|
||||
|
||||
@ -365,48 +365,49 @@ static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
|
||||
* Overflow check
|
||||
* sum must be greater (or equal) than the largest operand
|
||||
*/
|
||||
req_sumlen = CEIL4(xcRB->request_control_blk_length) +
|
||||
xcRB->request_data_length;
|
||||
if ((CEIL4(xcRB->request_control_blk_length) <=
|
||||
xcRB->request_data_length) ?
|
||||
(req_sumlen < xcRB->request_data_length) :
|
||||
(req_sumlen < CEIL4(xcRB->request_control_blk_length))) {
|
||||
req_sumlen = CEIL4(xcrb->request_control_blk_length) +
|
||||
xcrb->request_data_length;
|
||||
if ((CEIL4(xcrb->request_control_blk_length) <=
|
||||
xcrb->request_data_length) ?
|
||||
req_sumlen < xcrb->request_data_length :
|
||||
req_sumlen < CEIL4(xcrb->request_control_blk_length)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (CEIL4(xcRB->reply_control_blk_length) <
|
||||
xcRB->reply_control_blk_length)
|
||||
if (CEIL4(xcrb->reply_control_blk_length) <
|
||||
xcrb->reply_control_blk_length)
|
||||
return -EINVAL; /* overflow after alignment*/
|
||||
|
||||
/*
|
||||
* Overflow check
|
||||
* sum must be greater (or equal) than the largest operand
|
||||
*/
|
||||
resp_sumlen = CEIL4(xcRB->reply_control_blk_length) +
|
||||
xcRB->reply_data_length;
|
||||
if ((CEIL4(xcRB->reply_control_blk_length) <= xcRB->reply_data_length) ?
|
||||
(resp_sumlen < xcRB->reply_data_length) :
|
||||
(resp_sumlen < CEIL4(xcRB->reply_control_blk_length))) {
|
||||
resp_sumlen = CEIL4(xcrb->reply_control_blk_length) +
|
||||
xcrb->reply_data_length;
|
||||
if ((CEIL4(xcrb->reply_control_blk_length) <=
|
||||
xcrb->reply_data_length) ?
|
||||
resp_sumlen < xcrb->reply_data_length :
|
||||
resp_sumlen < CEIL4(xcrb->reply_control_blk_length)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* prepare type6 header */
|
||||
msg->hdr = static_type6_hdrX;
|
||||
memcpy(msg->hdr.agent_id, &(xcRB->agent_ID), sizeof(xcRB->agent_ID));
|
||||
msg->hdr.ToCardLen1 = xcRB->request_control_blk_length;
|
||||
if (xcRB->request_data_length) {
|
||||
memcpy(msg->hdr.agent_id, &xcrb->agent_ID, sizeof(xcrb->agent_ID));
|
||||
msg->hdr.tocardlen1 = xcrb->request_control_blk_length;
|
||||
if (xcrb->request_data_length) {
|
||||
msg->hdr.offset2 = msg->hdr.offset1 + rcblen;
|
||||
msg->hdr.ToCardLen2 = xcRB->request_data_length;
|
||||
msg->hdr.tocardlen2 = xcrb->request_data_length;
|
||||
}
|
||||
msg->hdr.FromCardLen1 = xcRB->reply_control_blk_length;
|
||||
msg->hdr.FromCardLen2 = xcRB->reply_data_length;
|
||||
msg->hdr.fromcardlen1 = xcrb->reply_control_blk_length;
|
||||
msg->hdr.fromcardlen2 = xcrb->reply_data_length;
|
||||
|
||||
/* prepare CPRB */
|
||||
if (z_copy_from_user(userspace, &(msg->cprbx), xcRB->request_control_blk_addr,
|
||||
xcRB->request_control_blk_length))
|
||||
if (z_copy_from_user(userspace, &msg->cprbx, xcrb->request_control_blk_addr,
|
||||
xcrb->request_control_blk_length))
|
||||
return -EFAULT;
|
||||
if (msg->cprbx.cprb_len + sizeof(msg->hdr.function_code) >
|
||||
xcRB->request_control_blk_length)
|
||||
xcrb->request_control_blk_length)
|
||||
return -EINVAL;
|
||||
function_code = ((unsigned char *)&msg->cprbx) + msg->cprbx.cprb_len;
|
||||
memcpy(msg->hdr.function_code, function_code,
|
||||
@ -416,8 +417,8 @@ static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
|
||||
*dom = (unsigned short *)&msg->cprbx.domain;
|
||||
|
||||
/* check subfunction, US and AU need special flag with NQAP */
|
||||
if (memcmp(function_code, "US", 2) == 0
|
||||
|| memcmp(function_code, "AU", 2) == 0)
|
||||
if (memcmp(function_code, "US", 2) == 0 ||
|
||||
memcmp(function_code, "AU", 2) == 0)
|
||||
ap_msg->flags |= AP_MSG_FLAG_SPECIAL;
|
||||
|
||||
#ifdef CONFIG_ZCRYPT_DEBUG
|
||||
@ -443,16 +444,16 @@ static int XCRB_msg_to_type6CPRB_msgX(bool userspace, struct ap_message *ap_msg,
|
||||
}
|
||||
|
||||
/* copy data block */
|
||||
if (xcRB->request_data_length &&
|
||||
z_copy_from_user(userspace, req_data, xcRB->request_data_address,
|
||||
xcRB->request_data_length))
|
||||
if (xcrb->request_data_length &&
|
||||
z_copy_from_user(userspace, req_data, xcrb->request_data_address,
|
||||
xcrb->request_data_length))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap_msg,
|
||||
struct ep11_urb *xcRB,
|
||||
struct ep11_urb *xcrb,
|
||||
unsigned int *fcode,
|
||||
unsigned int *domain)
|
||||
{
|
||||
@ -482,25 +483,25 @@ static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap
|
||||
unsigned int dom_val; /* domain id */
|
||||
} __packed * payload_hdr = NULL;
|
||||
|
||||
if (CEIL4(xcRB->req_len) < xcRB->req_len)
|
||||
if (CEIL4(xcrb->req_len) < xcrb->req_len)
|
||||
return -EINVAL; /* overflow after alignment*/
|
||||
|
||||
/* length checks */
|
||||
ap_msg->len = sizeof(struct type6_hdr) + CEIL4(xcRB->req_len);
|
||||
ap_msg->len = sizeof(struct type6_hdr) + CEIL4(xcrb->req_len);
|
||||
if (ap_msg->len > ap_msg->bufsize)
|
||||
return -EINVAL;
|
||||
|
||||
if (CEIL4(xcRB->resp_len) < xcRB->resp_len)
|
||||
if (CEIL4(xcrb->resp_len) < xcrb->resp_len)
|
||||
return -EINVAL; /* overflow after alignment*/
|
||||
|
||||
/* prepare type6 header */
|
||||
msg->hdr = static_type6_ep11_hdr;
|
||||
msg->hdr.ToCardLen1 = xcRB->req_len;
|
||||
msg->hdr.FromCardLen1 = xcRB->resp_len;
|
||||
msg->hdr.tocardlen1 = xcrb->req_len;
|
||||
msg->hdr.fromcardlen1 = xcrb->resp_len;
|
||||
|
||||
/* Import CPRB data from the ioctl input parameter */
|
||||
if (z_copy_from_user(userspace, &(msg->cprbx.cprb_len),
|
||||
(char __force __user *)xcRB->req, xcRB->req_len)) {
|
||||
if (z_copy_from_user(userspace, &msg->cprbx.cprb_len,
|
||||
(char __force __user *)xcrb->req, xcrb->req_len)) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
@ -518,7 +519,7 @@ static int xcrb_msg_to_type6_ep11cprb_msgx(bool userspace, struct ap_message *ap
|
||||
} else {
|
||||
lfmt = 1; /* length format #1 */
|
||||
}
|
||||
payload_hdr = (struct pld_hdr *)((&(msg->pld_lenfmt))+lfmt);
|
||||
payload_hdr = (struct pld_hdr *)((&msg->pld_lenfmt) + lfmt);
|
||||
*fcode = payload_hdr->func_val & 0xFFFF;
|
||||
|
||||
/* enable special processing based on the cprbs flags special bit */
|
||||
@ -567,9 +568,9 @@ struct type86_ep11_reply {
|
||||
} __packed;
|
||||
|
||||
static int convert_type86_ica(struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
char __user *outputdata,
|
||||
unsigned int outputdatalength)
|
||||
struct ap_message *reply,
|
||||
char __user *outputdata,
|
||||
unsigned int outputdatalength)
|
||||
{
|
||||
static unsigned char static_pad[] = {
|
||||
0x00, 0x02,
|
||||
@ -622,18 +623,18 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
|
||||
ZCRYPT_DBF_WARN("%s dev=%02x.%04x rc/rs=%d/%d => rc=EINVAL\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) service_rc, (int) service_rs);
|
||||
(int)service_rc, (int)service_rs);
|
||||
return -EINVAL;
|
||||
}
|
||||
zq->online = 0;
|
||||
pr_err("Crypto dev=%02x.%04x rc/rs=%d/%d online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) service_rc, (int) service_rs);
|
||||
(int)service_rc, (int)service_rs);
|
||||
ZCRYPT_DBF_ERR("%s dev=%02x.%04x rc/rs=%d/%d => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) service_rc, (int) service_rs);
|
||||
(int)service_rc, (int)service_rs);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
@ -672,42 +673,42 @@ static int convert_type86_ica(struct zcrypt_queue *zq,
|
||||
*
|
||||
* @zq: crypto device pointer
|
||||
* @reply: reply AP message.
|
||||
* @xcRB: pointer to XCRB
|
||||
* @xcrb: pointer to XCRB
|
||||
*
|
||||
* Returns 0 on success or -EINVAL, -EFAULT, -EAGAIN in case of an error.
|
||||
*/
|
||||
static int convert_type86_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
struct ica_xcRB *xcRB)
|
||||
struct ica_xcRB *xcrb)
|
||||
{
|
||||
struct type86_fmt2_msg *msg = reply->msg;
|
||||
char *data = reply->msg;
|
||||
|
||||
/* Copy CPRB to user */
|
||||
if (xcRB->reply_control_blk_length < msg->fmt2.count1) {
|
||||
if (xcrb->reply_control_blk_length < msg->fmt2.count1) {
|
||||
ZCRYPT_DBF_DBG("%s reply_control_blk_length %u < required %u => EMSGSIZE\n",
|
||||
__func__, xcRB->reply_control_blk_length,
|
||||
__func__, xcrb->reply_control_blk_length,
|
||||
msg->fmt2.count1);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
if (z_copy_to_user(userspace, xcRB->reply_control_blk_addr,
|
||||
if (z_copy_to_user(userspace, xcrb->reply_control_blk_addr,
|
||||
data + msg->fmt2.offset1, msg->fmt2.count1))
|
||||
return -EFAULT;
|
||||
xcRB->reply_control_blk_length = msg->fmt2.count1;
|
||||
xcrb->reply_control_blk_length = msg->fmt2.count1;
|
||||
|
||||
/* Copy data buffer to user */
|
||||
if (msg->fmt2.count2) {
|
||||
if (xcRB->reply_data_length < msg->fmt2.count2) {
|
||||
if (xcrb->reply_data_length < msg->fmt2.count2) {
|
||||
ZCRYPT_DBF_DBG("%s reply_data_length %u < required %u => EMSGSIZE\n",
|
||||
__func__, xcRB->reply_data_length,
|
||||
__func__, xcrb->reply_data_length,
|
||||
msg->fmt2.count2);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
if (z_copy_to_user(userspace, xcRB->reply_data_addr,
|
||||
if (z_copy_to_user(userspace, xcrb->reply_data_addr,
|
||||
data + msg->fmt2.offset2, msg->fmt2.count2))
|
||||
return -EFAULT;
|
||||
}
|
||||
xcRB->reply_data_length = msg->fmt2.count2;
|
||||
xcrb->reply_data_length = msg->fmt2.count2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -717,35 +718,35 @@ static int convert_type86_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
*
|
||||
* @zq: crypto device pointer
|
||||
* @reply: reply AP message.
|
||||
* @xcRB: pointer to EP11 user request block
|
||||
* @xcrb: pointer to EP11 user request block
|
||||
*
|
||||
* Returns 0 on success or -EINVAL, -EFAULT, -EAGAIN in case of an error.
|
||||
*/
|
||||
static int convert_type86_ep11_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
struct ep11_urb *xcRB)
|
||||
struct ep11_urb *xcrb)
|
||||
{
|
||||
struct type86_fmt2_msg *msg = reply->msg;
|
||||
char *data = reply->msg;
|
||||
|
||||
if (xcRB->resp_len < msg->fmt2.count1) {
|
||||
if (xcrb->resp_len < msg->fmt2.count1) {
|
||||
ZCRYPT_DBF_DBG("%s resp_len %u < required %u => EMSGSIZE\n",
|
||||
__func__, (unsigned int)xcRB->resp_len,
|
||||
__func__, (unsigned int)xcrb->resp_len,
|
||||
msg->fmt2.count1);
|
||||
return -EMSGSIZE;
|
||||
}
|
||||
|
||||
/* Copy response CPRB to user */
|
||||
if (z_copy_to_user(userspace, (char __force __user *)xcRB->resp,
|
||||
if (z_copy_to_user(userspace, (char __force __user *)xcrb->resp,
|
||||
data + msg->fmt2.offset1, msg->fmt2.count1))
|
||||
return -EFAULT;
|
||||
xcRB->resp_len = msg->fmt2.count1;
|
||||
xcrb->resp_len = msg->fmt2.count1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int convert_type86_rng(struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
char *buffer)
|
||||
struct ap_message *reply,
|
||||
char *buffer)
|
||||
{
|
||||
struct {
|
||||
struct type86_hdr hdr;
|
||||
@ -761,9 +762,9 @@ static int convert_type86_rng(struct zcrypt_queue *zq,
|
||||
}
|
||||
|
||||
static int convert_response_ica(struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
char __user *outputdata,
|
||||
unsigned int outputdatalength)
|
||||
struct ap_message *reply,
|
||||
char __user *outputdata,
|
||||
unsigned int outputdatalength)
|
||||
{
|
||||
struct type86x_reply *msg = reply->msg;
|
||||
|
||||
@ -773,13 +774,14 @@ static int convert_response_ica(struct zcrypt_queue *zq,
|
||||
return convert_error(zq, reply);
|
||||
case TYPE86_RSP_CODE:
|
||||
if (msg->cprbx.ccp_rtcode &&
|
||||
(msg->cprbx.ccp_rscode == 0x14f) &&
|
||||
(outputdatalength > 256)) {
|
||||
msg->cprbx.ccp_rscode == 0x14f &&
|
||||
outputdatalength > 256) {
|
||||
if (zq->zcard->max_exp_bit_length <= 17) {
|
||||
zq->zcard->max_exp_bit_length = 17;
|
||||
return -EAGAIN;
|
||||
} else
|
||||
} else {
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
if (msg->hdr.reply_code)
|
||||
return convert_error(zq, reply);
|
||||
@ -793,11 +795,11 @@ static int convert_response_ica(struct zcrypt_queue *zq,
|
||||
pr_err("Crypto dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) msg->hdr.type);
|
||||
(int)msg->hdr.type);
|
||||
ZCRYPT_DBF_ERR(
|
||||
"%s dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid), (int) msg->hdr.type);
|
||||
AP_QID_QUEUE(zq->queue->qid), (int)msg->hdr.type);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
@ -805,41 +807,41 @@ static int convert_response_ica(struct zcrypt_queue *zq,
|
||||
|
||||
static int convert_response_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
struct ica_xcRB *xcRB)
|
||||
struct ica_xcRB *xcrb)
|
||||
{
|
||||
struct type86x_reply *msg = reply->msg;
|
||||
|
||||
switch (msg->hdr.type) {
|
||||
case TYPE82_RSP_CODE:
|
||||
case TYPE88_RSP_CODE:
|
||||
xcRB->status = 0x0008044DL; /* HDD_InvalidParm */
|
||||
xcrb->status = 0x0008044DL; /* HDD_InvalidParm */
|
||||
return convert_error(zq, reply);
|
||||
case TYPE86_RSP_CODE:
|
||||
if (msg->hdr.reply_code) {
|
||||
memcpy(&(xcRB->status), msg->fmt2.apfs, sizeof(u32));
|
||||
memcpy(&xcrb->status, msg->fmt2.apfs, sizeof(u32));
|
||||
return convert_error(zq, reply);
|
||||
}
|
||||
if (msg->cprbx.cprb_ver_id == 0x02)
|
||||
return convert_type86_xcrb(userspace, zq, reply, xcRB);
|
||||
return convert_type86_xcrb(userspace, zq, reply, xcrb);
|
||||
fallthrough; /* wrong cprb version is an unknown response */
|
||||
default: /* Unknown response type, this should NEVER EVER happen */
|
||||
xcRB->status = 0x0008044DL; /* HDD_InvalidParm */
|
||||
xcrb->status = 0x0008044DL; /* HDD_InvalidParm */
|
||||
zq->online = 0;
|
||||
pr_err("Crypto dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) msg->hdr.type);
|
||||
(int)msg->hdr.type);
|
||||
ZCRYPT_DBF_ERR(
|
||||
"%s dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid), (int) msg->hdr.type);
|
||||
AP_QID_QUEUE(zq->queue->qid), (int)msg->hdr.type);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
static int convert_response_ep11_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ap_message *reply, struct ep11_urb *xcRB)
|
||||
struct ap_message *reply, struct ep11_urb *xcrb)
|
||||
{
|
||||
struct type86_ep11_reply *msg = reply->msg;
|
||||
|
||||
@ -851,26 +853,26 @@ static int convert_response_ep11_xcrb(bool userspace, struct zcrypt_queue *zq,
|
||||
if (msg->hdr.reply_code)
|
||||
return convert_error(zq, reply);
|
||||
if (msg->cprbx.cprb_ver_id == 0x04)
|
||||
return convert_type86_ep11_xcrb(userspace, zq, reply, xcRB);
|
||||
return convert_type86_ep11_xcrb(userspace, zq, reply, xcrb);
|
||||
fallthrough; /* wrong cprb version is an unknown resp */
|
||||
default: /* Unknown response type, this should NEVER EVER happen */
|
||||
zq->online = 0;
|
||||
pr_err("Crypto dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) msg->hdr.type);
|
||||
(int)msg->hdr.type);
|
||||
ZCRYPT_DBF_ERR(
|
||||
"%s dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid), (int) msg->hdr.type);
|
||||
AP_QID_QUEUE(zq->queue->qid), (int)msg->hdr.type);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
static int convert_response_rng(struct zcrypt_queue *zq,
|
||||
struct ap_message *reply,
|
||||
char *data)
|
||||
struct ap_message *reply,
|
||||
char *data)
|
||||
{
|
||||
struct type86x_reply *msg = reply->msg;
|
||||
|
||||
@ -889,11 +891,11 @@ static int convert_response_rng(struct zcrypt_queue *zq,
|
||||
pr_err("Crypto dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid),
|
||||
(int) msg->hdr.type);
|
||||
(int)msg->hdr.type);
|
||||
ZCRYPT_DBF_ERR(
|
||||
"%s dev=%02x.%04x unknown response type 0x%02x => online=0 rc=EAGAIN\n",
|
||||
__func__, AP_QID_CARD(zq->queue->qid),
|
||||
AP_QID_QUEUE(zq->queue->qid), (int) msg->hdr.type);
|
||||
AP_QID_QUEUE(zq->queue->qid), (int)msg->hdr.type);
|
||||
ap_send_online_uevent(&zq->queue->ap_dev, zq->online);
|
||||
return -EAGAIN;
|
||||
}
|
||||
@ -908,15 +910,15 @@ static int convert_response_rng(struct zcrypt_queue *zq,
|
||||
* @reply: pointer to the AP reply message
|
||||
*/
|
||||
static void zcrypt_msgtype6_receive(struct ap_queue *aq,
|
||||
struct ap_message *msg,
|
||||
struct ap_message *reply)
|
||||
struct ap_message *msg,
|
||||
struct ap_message *reply)
|
||||
{
|
||||
static struct error_hdr error_reply = {
|
||||
.type = TYPE82_RSP_CODE,
|
||||
.reply_code = REP82_ERROR_MACHINE_FAILURE,
|
||||
};
|
||||
struct response_type *resp_type =
|
||||
(struct response_type *) msg->private;
|
||||
(struct response_type *)msg->private;
|
||||
struct type86x_reply *t86r;
|
||||
int len;
|
||||
|
||||
@ -925,7 +927,7 @@ static void zcrypt_msgtype6_receive(struct ap_queue *aq,
|
||||
goto out; /* ap_msg->rc indicates the error */
|
||||
t86r = reply->msg;
|
||||
if (t86r->hdr.type == TYPE86_RSP_CODE &&
|
||||
t86r->cprbx.cprb_ver_id == 0x02) {
|
||||
t86r->cprbx.cprb_ver_id == 0x02) {
|
||||
switch (resp_type->type) {
|
||||
case CEXXC_RESPONSE_TYPE_ICA:
|
||||
len = sizeof(struct type86x_reply) + t86r->length - 2;
|
||||
@ -948,10 +950,11 @@ static void zcrypt_msgtype6_receive(struct ap_queue *aq,
|
||||
default:
|
||||
memcpy(msg->msg, &error_reply, sizeof(error_reply));
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
memcpy(msg->msg, reply->msg, sizeof(error_reply));
|
||||
}
|
||||
out:
|
||||
complete(&(resp_type->work));
|
||||
complete(&resp_type->work);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -998,7 +1001,7 @@ static void zcrypt_msgtype6_receive_ep11(struct ap_queue *aq,
|
||||
memcpy(msg->msg, reply->msg, sizeof(error_reply));
|
||||
}
|
||||
out:
|
||||
complete(&(resp_type->work));
|
||||
complete(&resp_type->work);
|
||||
}
|
||||
|
||||
static atomic_t zcrypt_step = ATOMIC_INIT(0);
|
||||
@ -1019,15 +1022,15 @@ static long zcrypt_msgtype6_modexpo(struct zcrypt_queue *zq,
|
||||
};
|
||||
int rc;
|
||||
|
||||
ap_msg->msg = (void *) get_zeroed_page(GFP_KERNEL);
|
||||
ap_msg->msg = (void *)get_zeroed_page(GFP_KERNEL);
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->bufsize = PAGE_SIZE;
|
||||
ap_msg->receive = zcrypt_msgtype6_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = &resp_type;
|
||||
rc = ICAMEX_msg_to_type6MEX_msgX(zq, ap_msg, mex);
|
||||
rc = icamex_msg_to_type6mex_msgx(zq, ap_msg, mex);
|
||||
if (rc)
|
||||
goto out_free;
|
||||
init_completion(&resp_type.work);
|
||||
@ -1041,11 +1044,13 @@ static long zcrypt_msgtype6_modexpo(struct zcrypt_queue *zq,
|
||||
rc = convert_response_ica(zq, ap_msg,
|
||||
mex->outputdata,
|
||||
mex->outputdatalength);
|
||||
} else
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out_free:
|
||||
free_page((unsigned long) ap_msg->msg);
|
||||
free_page((unsigned long)ap_msg->msg);
|
||||
ap_msg->private = NULL;
|
||||
ap_msg->msg = NULL;
|
||||
return rc;
|
||||
@ -1067,15 +1072,15 @@ static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_queue *zq,
|
||||
};
|
||||
int rc;
|
||||
|
||||
ap_msg->msg = (void *) get_zeroed_page(GFP_KERNEL);
|
||||
ap_msg->msg = (void *)get_zeroed_page(GFP_KERNEL);
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->bufsize = PAGE_SIZE;
|
||||
ap_msg->receive = zcrypt_msgtype6_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = &resp_type;
|
||||
rc = ICACRT_msg_to_type6CRT_msgX(zq, ap_msg, crt);
|
||||
rc = icacrt_msg_to_type6crt_msgx(zq, ap_msg, crt);
|
||||
if (rc)
|
||||
goto out_free;
|
||||
init_completion(&resp_type.work);
|
||||
@ -1093,8 +1098,9 @@ static long zcrypt_msgtype6_modexpo_crt(struct zcrypt_queue *zq,
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out_free:
|
||||
free_page((unsigned long) ap_msg->msg);
|
||||
free_page((unsigned long)ap_msg->msg);
|
||||
ap_msg->private = NULL;
|
||||
ap_msg->msg = NULL;
|
||||
return rc;
|
||||
@ -1109,7 +1115,7 @@ out_free:
|
||||
* by the caller with ap_init_message(). Also the caller has to
|
||||
* make sure ap_release_message() is always called even on failure.
|
||||
*/
|
||||
int prep_cca_ap_msg(bool userspace, struct ica_xcRB *xcRB,
|
||||
int prep_cca_ap_msg(bool userspace, struct ica_xcRB *xcrb,
|
||||
struct ap_message *ap_msg,
|
||||
unsigned int *func_code, unsigned short **dom)
|
||||
{
|
||||
@ -1122,12 +1128,12 @@ int prep_cca_ap_msg(bool userspace, struct ica_xcRB *xcRB,
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->receive = zcrypt_msgtype6_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
|
||||
if (!ap_msg->private)
|
||||
return -ENOMEM;
|
||||
return XCRB_msg_to_type6CPRB_msgX(userspace, ap_msg, xcRB, func_code, dom);
|
||||
return xcrb_msg_to_type6cprb_msgx(userspace, ap_msg, xcrb, func_code, dom);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1135,10 +1141,10 @@ int prep_cca_ap_msg(bool userspace, struct ica_xcRB *xcRB,
|
||||
* device to handle a send_cprb request.
|
||||
* @zq: pointer to zcrypt_queue structure that identifies the
|
||||
* CEXxC device to the request distributor
|
||||
* @xcRB: pointer to the send_cprb request buffer
|
||||
* @xcrb: pointer to the send_cprb request buffer
|
||||
*/
|
||||
static long zcrypt_msgtype6_send_cprb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ica_xcRB *xcRB,
|
||||
struct ica_xcRB *xcrb,
|
||||
struct ap_message *ap_msg)
|
||||
{
|
||||
int rc;
|
||||
@ -1153,11 +1159,11 @@ static long zcrypt_msgtype6_send_cprb(bool userspace, struct zcrypt_queue *zq,
|
||||
* Set the queue's reply buffer length minus 128 byte padding
|
||||
* as reply limit for the card firmware.
|
||||
*/
|
||||
msg->hdr.FromCardLen1 = min_t(unsigned int, msg->hdr.FromCardLen1,
|
||||
msg->hdr.fromcardlen1 = min_t(unsigned int, msg->hdr.fromcardlen1,
|
||||
zq->reply.bufsize - 128);
|
||||
if (msg->hdr.FromCardLen2)
|
||||
msg->hdr.FromCardLen2 =
|
||||
zq->reply.bufsize - msg->hdr.FromCardLen1 - 128;
|
||||
if (msg->hdr.fromcardlen2)
|
||||
msg->hdr.fromcardlen2 =
|
||||
zq->reply.bufsize - msg->hdr.fromcardlen1 - 128;
|
||||
|
||||
init_completion(&rtype->work);
|
||||
rc = ap_queue_message(zq->queue, ap_msg);
|
||||
@ -1167,10 +1173,12 @@ static long zcrypt_msgtype6_send_cprb(bool userspace, struct zcrypt_queue *zq,
|
||||
if (rc == 0) {
|
||||
rc = ap_msg->rc;
|
||||
if (rc == 0)
|
||||
rc = convert_response_xcrb(userspace, zq, ap_msg, xcRB);
|
||||
} else
|
||||
rc = convert_response_xcrb(userspace, zq, ap_msg, xcrb);
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out:
|
||||
if (rc)
|
||||
ZCRYPT_DBF_DBG("%s send cprb at dev=%02x.%04x rc=%d\n",
|
||||
@ -1201,7 +1209,7 @@ int prep_ep11_ap_msg(bool userspace, struct ep11_urb *xcrb,
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->receive = zcrypt_msgtype6_receive_ep11;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
|
||||
if (!ap_msg->private)
|
||||
@ -1215,7 +1223,7 @@ int prep_ep11_ap_msg(bool userspace, struct ep11_urb *xcrb,
|
||||
* device to handle a send_ep11_cprb request.
|
||||
* @zq: pointer to zcrypt_queue structure that identifies the
|
||||
* CEX4P device to the request distributor
|
||||
* @xcRB: pointer to the ep11 user request block
|
||||
* @xcrb: pointer to the ep11 user request block
|
||||
*/
|
||||
static long zcrypt_msgtype6_send_ep11_cprb(bool userspace, struct zcrypt_queue *zq,
|
||||
struct ep11_urb *xcrb,
|
||||
@ -1265,7 +1273,7 @@ static long zcrypt_msgtype6_send_ep11_cprb(bool userspace, struct zcrypt_queue *
|
||||
} else {
|
||||
lfmt = 1; /* length format #1 */
|
||||
}
|
||||
payload_hdr = (struct pld_hdr *)((&(msg->pld_lenfmt))+lfmt);
|
||||
payload_hdr = (struct pld_hdr *)((&msg->pld_lenfmt) + lfmt);
|
||||
payload_hdr->dom_val = (unsigned int)
|
||||
AP_QID_QUEUE(zq->queue->qid);
|
||||
}
|
||||
@ -1274,7 +1282,7 @@ static long zcrypt_msgtype6_send_ep11_cprb(bool userspace, struct zcrypt_queue *
|
||||
* Set the queue's reply buffer length minus the two prepend headers
|
||||
* as reply limit for the card firmware.
|
||||
*/
|
||||
msg->hdr.FromCardLen1 = zq->reply.bufsize -
|
||||
msg->hdr.fromcardlen1 = zq->reply.bufsize -
|
||||
sizeof(struct type86_hdr) - sizeof(struct type86_fmt2_ext);
|
||||
|
||||
init_completion(&rtype->work);
|
||||
@ -1286,9 +1294,11 @@ static long zcrypt_msgtype6_send_ep11_cprb(bool userspace, struct zcrypt_queue *
|
||||
rc = ap_msg->rc;
|
||||
if (rc == 0)
|
||||
rc = convert_response_ep11_xcrb(userspace, zq, ap_msg, xcrb);
|
||||
} else
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
|
||||
out:
|
||||
if (rc)
|
||||
ZCRYPT_DBF_DBG("%s send cprb at dev=%02x.%04x rc=%d\n",
|
||||
@ -1309,13 +1319,13 @@ int prep_rng_ap_msg(struct ap_message *ap_msg, int *func_code,
|
||||
if (!ap_msg->msg)
|
||||
return -ENOMEM;
|
||||
ap_msg->receive = zcrypt_msgtype6_receive;
|
||||
ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
|
||||
ap_msg->psmid = (((unsigned long long)current->pid) << 32) +
|
||||
atomic_inc_return(&zcrypt_step);
|
||||
ap_msg->private = kmemdup(&resp_type, sizeof(resp_type), GFP_KERNEL);
|
||||
if (!ap_msg->private)
|
||||
return -ENOMEM;
|
||||
|
||||
rng_type6CPRB_msgX(ap_msg, ZCRYPT_RNG_BUFFER_SIZE, domain);
|
||||
rng_type6cprb_msgx(ap_msg, ZCRYPT_RNG_BUFFER_SIZE, domain);
|
||||
|
||||
*func_code = HWRNG;
|
||||
return 0;
|
||||
@ -1354,9 +1364,10 @@ static long zcrypt_msgtype6_rng(struct zcrypt_queue *zq,
|
||||
rc = ap_msg->rc;
|
||||
if (rc == 0)
|
||||
rc = convert_response_rng(zq, ap_msg, buffer);
|
||||
} else
|
||||
} else {
|
||||
/* Signal pending. */
|
||||
ap_cancel_message(zq->queue, ap_msg);
|
||||
}
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
|
@ -45,14 +45,14 @@ struct type6_hdr {
|
||||
unsigned char reserved5[2]; /* 0x0000 */
|
||||
unsigned char function_code[2]; /* for PKD, 0x5044 (ascii 'PD') */
|
||||
unsigned char reserved6[2]; /* 0x0000 */
|
||||
unsigned int ToCardLen1; /* (request CPRB len + 3) & -4 */
|
||||
unsigned int ToCardLen2; /* db len 0x00000000 for PKD */
|
||||
unsigned int ToCardLen3; /* 0x00000000 */
|
||||
unsigned int ToCardLen4; /* 0x00000000 */
|
||||
unsigned int FromCardLen1; /* response buffer length */
|
||||
unsigned int FromCardLen2; /* db len 0x00000000 for PKD */
|
||||
unsigned int FromCardLen3; /* 0x00000000 */
|
||||
unsigned int FromCardLen4; /* 0x00000000 */
|
||||
unsigned int tocardlen1; /* (request CPRB len + 3) & -4 */
|
||||
unsigned int tocardlen2; /* db len 0x00000000 for PKD */
|
||||
unsigned int tocardlen3; /* 0x00000000 */
|
||||
unsigned int tocardlen4; /* 0x00000000 */
|
||||
unsigned int fromcardlen1; /* response buffer length */
|
||||
unsigned int fromcardlen2; /* db len 0x00000000 for PKD */
|
||||
unsigned int fromcardlen3; /* 0x00000000 */
|
||||
unsigned int fromcardlen4; /* 0x00000000 */
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
@ -116,7 +116,7 @@ int speed_idx_ep11(int);
|
||||
* @ap_dev: AP device pointer
|
||||
* @ap_msg: pointer to AP message
|
||||
*/
|
||||
static inline void rng_type6CPRB_msgX(struct ap_message *ap_msg,
|
||||
static inline void rng_type6cprb_msgx(struct ap_message *ap_msg,
|
||||
unsigned int random_number_length,
|
||||
unsigned int *domain)
|
||||
{
|
||||
@ -134,8 +134,8 @@ static inline void rng_type6CPRB_msgX(struct ap_message *ap_msg,
|
||||
.offset1 = 0x00000058,
|
||||
.agent_id = {'C', 'A'},
|
||||
.function_code = {'R', 'L'},
|
||||
.ToCardLen1 = sizeof(*msg) - sizeof(msg->hdr),
|
||||
.FromCardLen1 = sizeof(*msg) - sizeof(msg->hdr),
|
||||
.tocardlen1 = sizeof(*msg) - sizeof(msg->hdr),
|
||||
.fromcardlen1 = sizeof(*msg) - sizeof(msg->hdr),
|
||||
};
|
||||
static struct CPRBX local_cprbx = {
|
||||
.cprb_len = 0x00dc,
|
||||
@ -147,9 +147,9 @@ static inline void rng_type6CPRB_msgX(struct ap_message *ap_msg,
|
||||
};
|
||||
|
||||
msg->hdr = static_type6_hdrX;
|
||||
msg->hdr.FromCardLen2 = random_number_length,
|
||||
msg->hdr.fromcardlen2 = random_number_length;
|
||||
msg->cprbx = local_cprbx;
|
||||
msg->cprbx.rpl_datal = random_number_length,
|
||||
msg->cprbx.rpl_datal = random_number_length;
|
||||
memcpy(msg->function_code, msg->hdr.function_code, 0x02);
|
||||
msg->rule_length = 0x0a;
|
||||
memcpy(msg->rule, "RANDOM ", 8);
|
||||
|
@ -114,7 +114,7 @@ struct zcrypt_queue *zcrypt_queue_alloc(size_t reply_buf_size)
|
||||
{
|
||||
struct zcrypt_queue *zq;
|
||||
|
||||
zq = kzalloc(sizeof(struct zcrypt_queue), GFP_KERNEL);
|
||||
zq = kzalloc(sizeof(*zq), GFP_KERNEL);
|
||||
if (!zq)
|
||||
return NULL;
|
||||
zq->reply.msg = kmalloc(reply_buf_size, GFP_KERNEL);
|
||||
|
Loading…
Reference in New Issue
Block a user