crypto: testmgr - check for skcipher_request corruption
Check that algorithms do not change the skcipher_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
4cc2dcf95f
commit
fa353c9917
@ -1535,6 +1535,47 @@ static int test_skcipher_vec_cfg(const char *driver, int enc,
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Check that the algorithm didn't overwrite things it shouldn't have */
|
||||
if (req->cryptlen != vec->len ||
|
||||
req->iv != iv ||
|
||||
req->src != tsgls->src.sgl_ptr ||
|
||||
req->dst != tsgls->dst.sgl_ptr ||
|
||||
crypto_skcipher_reqtfm(req) != tfm ||
|
||||
req->base.complete != crypto_req_done ||
|
||||
req->base.flags != req_flags ||
|
||||
req->base.data != &wait) {
|
||||
pr_err("alg: skcipher: %s %s corrupted request struct on test vector %u, cfg=\"%s\"\n",
|
||||
driver, op, vec_num, cfg->name);
|
||||
if (req->cryptlen != vec->len)
|
||||
pr_err("alg: skcipher: changed 'req->cryptlen'\n");
|
||||
if (req->iv != iv)
|
||||
pr_err("alg: skcipher: changed 'req->iv'\n");
|
||||
if (req->src != tsgls->src.sgl_ptr)
|
||||
pr_err("alg: skcipher: changed 'req->src'\n");
|
||||
if (req->dst != tsgls->dst.sgl_ptr)
|
||||
pr_err("alg: skcipher: changed 'req->dst'\n");
|
||||
if (crypto_skcipher_reqtfm(req) != tfm)
|
||||
pr_err("alg: skcipher: changed 'req->base.tfm'\n");
|
||||
if (req->base.complete != crypto_req_done)
|
||||
pr_err("alg: skcipher: changed 'req->base.complete'\n");
|
||||
if (req->base.flags != req_flags)
|
||||
pr_err("alg: skcipher: changed 'req->base.flags'\n");
|
||||
if (req->base.data != &wait)
|
||||
pr_err("alg: skcipher: changed 'req->base.data'\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if (is_test_sglist_corrupted(&tsgls->src)) {
|
||||
pr_err("alg: skcipher: %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: skcipher: %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) */
|
||||
err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext,
|
||||
vec->len, 0, true);
|
||||
|
Loading…
Reference in New Issue
Block a user