Commit ef528882 authored by Yi Yang's avatar Yi Yang
Browse files

crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY

mainline inclusion
from mainline-v6.13-rc1
commit 662f2f13e66d3883b9238b0b96b17886179e60e2
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7RZMT

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=662f2f13e66d3883b9238b0b96b17886179e60e2



--------------------------------

Since commit 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for
PADATA_RESET"), the pcrypt encryption and decryption operations return
-EAGAIN when the CPU goes online or offline. In alg_test(), a WARN is
generated when pcrypt_aead_decrypt() or pcrypt_aead_encrypt() returns
-EAGAIN, the unnecessary panic will occur when panic_on_warn set 1.
Fix this issue by calling crypto layer directly without parallelization
in that case.

Fixes: 8f4f68e788c3 ("crypto: pcrypt - Fix hungtask for PADATA_RESET")
Signed-off-by: default avatarYi Yang <yiyang13@huawei.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarYi Yang <yiyang13@huawei.com>
parent b72e8e32
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -117,8 +117,10 @@ static int pcrypt_aead_encrypt(struct aead_request *req)
	err = padata_do_parallel(ictx->psenc, padata, &ctx->cb_cpu);
	if (!err)
		return -EINPROGRESS;
	if (err == -EBUSY)
		return -EAGAIN;
	if (err == -EBUSY) {
		/* try non-parallel mode */
		return crypto_aead_encrypt(creq);
	}

	return err;
}
@@ -166,8 +168,10 @@ static int pcrypt_aead_decrypt(struct aead_request *req)
	err = padata_do_parallel(ictx->psdec, padata, &ctx->cb_cpu);
	if (!err)
		return -EINPROGRESS;
	if (err == -EBUSY)
		return -EAGAIN;
	if (err == -EBUSY) {
		/* try non-parallel mode */
		return crypto_aead_decrypt(creq);
	}

	return err;
}