mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
crypto: testmgr - check for aead_request corruption
Check that algorithms do not change the aead_request structure, as users may rely on submitting the request again (e.g. after copying new data into the same source buffer) without reinitializing everything. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
fa353c9917
commit
a6e5ef9baa
@ -1253,6 +1253,50 @@ static int test_aead_vec_cfg(const char *driver, int enc,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check that the algorithm didn't overwrite things it shouldn't have */
|
||||||
|
if (req->cryptlen != (enc ? vec->plen : vec->clen) ||
|
||||||
|
req->assoclen != vec->alen ||
|
||||||
|
req->iv != iv ||
|
||||||
|
req->src != tsgls->src.sgl_ptr ||
|
||||||
|
req->dst != tsgls->dst.sgl_ptr ||
|
||||||
|
crypto_aead_reqtfm(req) != tfm ||
|
||||||
|
req->base.complete != crypto_req_done ||
|
||||||
|
req->base.flags != req_flags ||
|
||||||
|
req->base.data != &wait) {
|
||||||
|
pr_err("alg: aead: %s %s corrupted request struct on test vector %u, cfg=\"%s\"\n",
|
||||||
|
driver, op, vec_num, cfg->name);
|
||||||
|
if (req->cryptlen != (enc ? vec->plen : vec->clen))
|
||||||
|
pr_err("alg: aead: changed 'req->cryptlen'\n");
|
||||||
|
if (req->assoclen != vec->alen)
|
||||||
|
pr_err("alg: aead: changed 'req->assoclen'\n");
|
||||||
|
if (req->iv != iv)
|
||||||
|
pr_err("alg: aead: changed 'req->iv'\n");
|
||||||
|
if (req->src != tsgls->src.sgl_ptr)
|
||||||
|
pr_err("alg: aead: changed 'req->src'\n");
|
||||||
|
if (req->dst != tsgls->dst.sgl_ptr)
|
||||||
|
pr_err("alg: aead: changed 'req->dst'\n");
|
||||||
|
if (crypto_aead_reqtfm(req) != tfm)
|
||||||
|
pr_err("alg: aead: changed 'req->base.tfm'\n");
|
||||||
|
if (req->base.complete != crypto_req_done)
|
||||||
|
pr_err("alg: aead: changed 'req->base.complete'\n");
|
||||||
|
if (req->base.flags != req_flags)
|
||||||
|
pr_err("alg: aead: changed 'req->base.flags'\n");
|
||||||
|
if (req->base.data != &wait)
|
||||||
|
pr_err("alg: aead: changed 'req->base.data'\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (is_test_sglist_corrupted(&tsgls->src)) {
|
||||||
|
pr_err("alg: aead: %s %s corrupted src sgl on test vector %u, cfg=\"%s\"\n",
|
||||||
|
driver, op, vec_num, cfg->name);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
if (tsgls->dst.sgl_ptr != tsgls->src.sgl &&
|
||||||
|
is_test_sglist_corrupted(&tsgls->dst)) {
|
||||||
|
pr_err("alg: aead: %s %s corrupted dst sgl on test vector %u, cfg=\"%s\"\n",
|
||||||
|
driver, op, vec_num, cfg->name);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check for the correct output (ciphertext or plaintext) */
|
/* Check for the correct output (ciphertext or plaintext) */
|
||||||
err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext,
|
err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext,
|
||||||
enc ? vec->clen : vec->plen,
|
enc ? vec->clen : vec->plen,
|
||||||
|
Loading…
Reference in New Issue
Block a user