forked from luck/tmp_suning_uos_patched
Merge branch 'next-hex2bin' of git://github.com/mzohar/linux-evm into next
This commit is contained in:
commit
c6cb56fc94
|
@ -63,6 +63,7 @@ u32 sas_get_pr_transport_id(
|
||||||
unsigned char *buf)
|
unsigned char *buf)
|
||||||
{
|
{
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set PROTOCOL IDENTIFIER to 6h for SAS
|
* Set PROTOCOL IDENTIFIER to 6h for SAS
|
||||||
|
@ -74,7 +75,9 @@ u32 sas_get_pr_transport_id(
|
||||||
*/
|
*/
|
||||||
ptr = &se_nacl->initiatorname[4]; /* Skip over 'naa. prefix */
|
ptr = &se_nacl->initiatorname[4]; /* Skip over 'naa. prefix */
|
||||||
|
|
||||||
hex2bin(&buf[4], ptr, 8);
|
ret = hex2bin(&buf[4], ptr, 8);
|
||||||
|
if (ret < 0)
|
||||||
|
pr_debug("sas transport_id: invalid hex string\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The SAS Transport ID is a hardcoded 24-byte length
|
* The SAS Transport ID is a hardcoded 24-byte length
|
||||||
|
@ -156,8 +159,9 @@ u32 fc_get_pr_transport_id(
|
||||||
unsigned char *buf)
|
unsigned char *buf)
|
||||||
{
|
{
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
int i;
|
int i, ret;
|
||||||
u32 off = 8;
|
u32 off = 8;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PROTOCOL IDENTIFIER is 0h for FCP-2
|
* PROTOCOL IDENTIFIER is 0h for FCP-2
|
||||||
*
|
*
|
||||||
|
@ -174,7 +178,9 @@ u32 fc_get_pr_transport_id(
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
hex2bin(&buf[off++], &ptr[i], 1);
|
ret = hex2bin(&buf[off++], &ptr[i], 1);
|
||||||
|
if (ret < 0)
|
||||||
|
pr_debug("fc transport_id: invalid hex string\n");
|
||||||
i += 2;
|
i += 2;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -382,7 +382,7 @@ static inline char *pack_hex_byte(char *buf, u8 byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int hex_to_bin(char ch);
|
extern int hex_to_bin(char ch);
|
||||||
extern void hex2bin(u8 *dst, const char *src, size_t count);
|
extern int __must_check hex2bin(u8 *dst, const char *src, size_t count);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* General tracing related utility functions - trace_printk(),
|
* General tracing related utility functions - trace_printk(),
|
||||||
|
|
|
@ -38,14 +38,21 @@ EXPORT_SYMBOL(hex_to_bin);
|
||||||
* @dst: binary result
|
* @dst: binary result
|
||||||
* @src: ascii hexadecimal string
|
* @src: ascii hexadecimal string
|
||||||
* @count: result length
|
* @count: result length
|
||||||
|
*
|
||||||
|
* Return 0 on success, -1 in case of bad input.
|
||||||
*/
|
*/
|
||||||
void hex2bin(u8 *dst, const char *src, size_t count)
|
int hex2bin(u8 *dst, const char *src, size_t count)
|
||||||
{
|
{
|
||||||
while (count--) {
|
while (count--) {
|
||||||
*dst = hex_to_bin(*src++) << 4;
|
int hi = hex_to_bin(*src++);
|
||||||
*dst += hex_to_bin(*src++);
|
int lo = hex_to_bin(*src++);
|
||||||
dst++;
|
|
||||||
|
if ((hi < 0) || (lo < 0))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
*dst++ = (hi << 4) | lo;
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(hex2bin);
|
EXPORT_SYMBOL(hex2bin);
|
||||||
|
|
||||||
|
|
|
@ -667,11 +667,19 @@ static int encrypted_key_decrypt(struct encrypted_key_payload *epayload,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
|
hex_encoded_data = hex_encoded_iv + (2 * ivsize) + 2;
|
||||||
hex2bin(epayload->iv, hex_encoded_iv, ivsize);
|
ret = hex2bin(epayload->iv, hex_encoded_iv, ivsize);
|
||||||
hex2bin(epayload->encrypted_data, hex_encoded_data, encrypted_datalen);
|
if (ret < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
ret = hex2bin(epayload->encrypted_data, hex_encoded_data,
|
||||||
|
encrypted_datalen);
|
||||||
|
if (ret < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
hmac = epayload->format + epayload->datablob_len;
|
hmac = epayload->format + epayload->datablob_len;
|
||||||
hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2), HASH_SIZE);
|
ret = hex2bin(hmac, hex_encoded_data + (encrypted_datalen * 2),
|
||||||
|
HASH_SIZE);
|
||||||
|
if (ret < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
mkey = request_master_key(epayload, &master_key, &master_keylen);
|
mkey = request_master_key(epayload, &master_key, &master_keylen);
|
||||||
if (IS_ERR(mkey))
|
if (IS_ERR(mkey))
|
||||||
|
|
|
@ -779,7 +779,10 @@ static int getoptions(char *c, struct trusted_key_payload *pay,
|
||||||
opt->pcrinfo_len = strlen(args[0].from) / 2;
|
opt->pcrinfo_len = strlen(args[0].from) / 2;
|
||||||
if (opt->pcrinfo_len > MAX_PCRINFO_SIZE)
|
if (opt->pcrinfo_len > MAX_PCRINFO_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
hex2bin(opt->pcrinfo, args[0].from, opt->pcrinfo_len);
|
res = hex2bin(opt->pcrinfo, args[0].from,
|
||||||
|
opt->pcrinfo_len);
|
||||||
|
if (res < 0)
|
||||||
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
case Opt_keyhandle:
|
case Opt_keyhandle:
|
||||||
res = strict_strtoul(args[0].from, 16, &handle);
|
res = strict_strtoul(args[0].from, 16, &handle);
|
||||||
|
@ -791,12 +794,18 @@ static int getoptions(char *c, struct trusted_key_payload *pay,
|
||||||
case Opt_keyauth:
|
case Opt_keyauth:
|
||||||
if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
|
if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
hex2bin(opt->keyauth, args[0].from, SHA1_DIGEST_SIZE);
|
res = hex2bin(opt->keyauth, args[0].from,
|
||||||
|
SHA1_DIGEST_SIZE);
|
||||||
|
if (res < 0)
|
||||||
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
case Opt_blobauth:
|
case Opt_blobauth:
|
||||||
if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
|
if (strlen(args[0].from) != 2 * SHA1_DIGEST_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
hex2bin(opt->blobauth, args[0].from, SHA1_DIGEST_SIZE);
|
res = hex2bin(opt->blobauth, args[0].from,
|
||||||
|
SHA1_DIGEST_SIZE);
|
||||||
|
if (res < 0)
|
||||||
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
case Opt_migratable:
|
case Opt_migratable:
|
||||||
if (*args[0].from == '0')
|
if (*args[0].from == '0')
|
||||||
|
@ -860,7 +869,9 @@ static int datablob_parse(char *datablob, struct trusted_key_payload *p,
|
||||||
p->blob_len = strlen(c) / 2;
|
p->blob_len = strlen(c) / 2;
|
||||||
if (p->blob_len > MAX_BLOB_SIZE)
|
if (p->blob_len > MAX_BLOB_SIZE)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
hex2bin(p->blob, c, p->blob_len);
|
ret = hex2bin(p->blob, c, p->blob_len);
|
||||||
|
if (ret < 0)
|
||||||
|
return -EINVAL;
|
||||||
ret = getoptions(datablob, p, o);
|
ret = getoptions(datablob, p, o);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user