Skip to content

Commit

Permalink
examples/fips_validation: fix auth verify
Browse files Browse the repository at this point in the history
[ upstream commit 82cfb9c ]

Fixes: f64adb6 ("examples/fips_validation: support HMAC parsing")

This patch fixes the incorrect mbuf write and digest memory leak in
fips_validation authentication verify.

Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Marko Kovacevic <marko.kovacevic@intel.com>
  • Loading branch information
Fan Zhang authored and kevintraynor committed Dec 11, 2019
1 parent 0b467ae commit 6cd900d
Showing 1 changed file with 16 additions and 42 deletions.
58 changes: 16 additions & 42 deletions examples/fips_validation/main.c
Expand Up @@ -404,59 +404,33 @@ static int
prepare_auth_op(void)
{
struct rte_crypto_sym_op *sym = env.op->sym;
uint8_t *pt;

__rte_crypto_op_reset(env.op, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
rte_pktmbuf_reset(env.mbuf);

sym->m_src = env.mbuf;
sym->auth.data.offset = 0;

if (info.op == FIPS_TEST_ENC_AUTH_GEN) {
uint8_t *pt;

if (vec.pt.len > RTE_MBUF_MAX_NB_SEGS) {
RTE_LOG(ERR, USER1, "PT len %u\n", vec.pt.len);
return -EPERM;
}

pt = (uint8_t *)rte_pktmbuf_append(env.mbuf, vec.pt.len +
vec.cipher_auth.digest.len);

if (!pt) {
RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
-ENOMEM);
return -ENOMEM;
}

memcpy(pt, vec.pt.val, vec.pt.len);
sym->auth.data.length = vec.pt.len;
sym->auth.digest.data = pt + vec.pt.len;
sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
env.mbuf, vec.pt.len);
pt = (uint8_t *)rte_pktmbuf_append(env.mbuf, vec.pt.len +
vec.cipher_auth.digest.len);

} else {
uint8_t *ct;
if (!pt) {
RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
-ENOMEM);
return -ENOMEM;
}

if (vec.ct.len > RTE_MBUF_MAX_NB_SEGS) {
RTE_LOG(ERR, USER1, "CT len %u\n", vec.ct.len);
return -EPERM;
}
sym->auth.data.length = vec.pt.len;
sym->auth.digest.data = pt + vec.pt.len;
sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(
env.mbuf, vec.pt.len);

ct = (uint8_t *)rte_pktmbuf_append(env.mbuf,
vec.ct.len + vec.cipher_auth.digest.len);
memcpy(pt, vec.pt.val, vec.pt.len);

if (!ct) {
RTE_LOG(ERR, USER1, "Error %i: MBUF too small\n",
-ENOMEM);
return -ENOMEM;
}

memcpy(ct, vec.ct.val, vec.ct.len);
sym->auth.data.length = vec.ct.len;
sym->auth.digest.data = vec.cipher_auth.digest.val;
sym->auth.digest.phys_addr = rte_malloc_virt2iova(
sym->auth.digest.data);
}
if (info.op == FIPS_TEST_DEC_AUTH_VERIF)
memcpy(pt + vec.pt.len, vec.cipher_auth.digest.val,
vec.cipher_auth.digest.len);

rte_crypto_op_attach_sym_session(env.op, env.sess);

Expand Down

0 comments on commit 6cd900d

Please sign in to comment.