Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb095593 authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu
Browse files

crypto: testmgr - don't use stack buffer in test_acomp()



With virtually-mapped stacks (CONFIG_VMAP_STACK=y), using the
scatterlist crypto API with stack buffers is not allowed, and with
appropriate debugging options will cause the
'BUG_ON(!virt_addr_valid(buf));' in sg_set_buf() to be triggered.
Use a heap buffer instead.

Fixes: d7db7a88 ("crypto: acomp - update testmgr with support for acomp")
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 93aafb6d
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -1448,17 +1448,21 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
{
	const char *algo = crypto_tfm_alg_driver_name(crypto_acomp_tfm(tfm));
	unsigned int i;
	char output[COMP_BUF_SIZE];
	char *output;
	int ret;
	struct scatterlist src, dst;
	struct acomp_req *req;
	struct tcrypt_result result;

	output = kmalloc(COMP_BUF_SIZE, GFP_KERNEL);
	if (!output)
		return -ENOMEM;

	for (i = 0; i < ctcount; i++) {
		unsigned int dlen = COMP_BUF_SIZE;
		int ilen = ctemplate[i].inlen;

		memset(output, 0, sizeof(output));
		memset(output, 0, dlen);
		init_completion(&result.completion);
		sg_init_one(&src, ctemplate[i].input, ilen);
		sg_init_one(&dst, output, dlen);
@@ -1507,7 +1511,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
		unsigned int dlen = COMP_BUF_SIZE;
		int ilen = dtemplate[i].inlen;

		memset(output, 0, sizeof(output));
		memset(output, 0, dlen);
		init_completion(&result.completion);
		sg_init_one(&src, dtemplate[i].input, ilen);
		sg_init_one(&dst, output, dlen);
@@ -1555,6 +1559,7 @@ static int test_acomp(struct crypto_acomp *tfm, struct comp_testvec *ctemplate,
	ret = 0;

out:
	kfree(output);
	return ret;
}