lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 18 Dec 2020 18:01:03 +0100 From: Ard Biesheuvel <ardb@...nel.org> To: linux-crypto@...r.kernel.org Cc: linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org, Ard Biesheuvel <ardb@...nel.org>, Dave Martin <dave.martin@....com>, Mark Brown <broonie@...nel.org>, Herbert Xu <herbert@...dor.apana.org.au>, Eric Biggers <ebiggers@...nel.org>, Will Deacon <will@...nel.org>, Catalin Marinas <catalin.marinas@....com>, Thomas Gleixner <tglx@...utronix.de>, Peter Zijlstra <peterz@...radead.org>, Sebastian Andrzej Siewior <bigeasy@...utronix.de>, Ingo Molnar <mingo@...nel.org> Subject: [RFC PATCH 2/5] crypto: skcipher - disallow en/decrypt for non-task or non-softirq context In order to ensure that kernel mode SIMD routines will not need a scalar fallback if they run with softirqs disabled, disallow any use of the skcipher encrypt and decrypt routines from outside of task or softirq context. Signed-off-by: Ard Biesheuvel <ardb@...nel.org> --- crypto/skcipher.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/crypto/skcipher.c b/crypto/skcipher.c index b4dae640de9f..d1a656d7d498 100644 --- a/crypto/skcipher.c +++ b/crypto/skcipher.c @@ -628,6 +628,11 @@ int crypto_skcipher_encrypt(struct skcipher_request *req) unsigned int cryptlen = req->cryptlen; int ret; + if (!(alg->cra_flags & CRYPTO_ALG_ASYNC) && + WARN_ONCE(!in_task() && !in_serving_softirq(), + "synchronous call from invalid context\n")) + return -EBUSY; + crypto_stats_get(alg); if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) ret = -ENOKEY; @@ -645,6 +650,11 @@ int crypto_skcipher_decrypt(struct skcipher_request *req) unsigned int cryptlen = req->cryptlen; int ret; + if (!(alg->cra_flags & CRYPTO_ALG_ASYNC) && + WARN_ONCE(!in_task() && !in_serving_softirq(), + "synchronous call from invalid context\n")) + return -EBUSY; + crypto_stats_get(alg); if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) ret = -ENOKEY; -- 2.17.1
Powered by blists - more mailing lists