Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1726670
| From | Gilad Ben-Yossef <gilad@benyossef.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v8 09/20] crypto: move drbg to generic async completion |
| Date | 2017-09-05 14:50 +0200 |
| Message-ID | <umlsJ-2FV-1@gated-at.bofh.it> (permalink) |
| References | <umlj3-2Cy-9@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
DRBG is starting an async. crypto op and waiting for it complete.
Move it over to generic code doing the same.
The code now also passes CRYPTO_TFM_REQ_MAY_SLEEP flag indicating
crypto request memory allocation may use GFP_KERNEL which should
be perfectly fine as the code is obviously sleeping for the
completion of the request any way.
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
---
crypto/drbg.c | 36 +++++++++---------------------------
include/crypto/drbg.h | 3 +--
2 files changed, 10 insertions(+), 29 deletions(-)
diff --git a/crypto/drbg.c b/crypto/drbg.c
index 633a88e..c522251 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1651,16 +1651,6 @@ static int drbg_fini_sym_kernel(struct drbg_state *drbg)
return 0;
}
-static void drbg_skcipher_cb(struct crypto_async_request *req, int error)
-{
- struct drbg_state *drbg = req->data;
-
- if (error == -EINPROGRESS)
- return;
- drbg->ctr_async_err = error;
- complete(&drbg->ctr_completion);
-}
-
static int drbg_init_sym_kernel(struct drbg_state *drbg)
{
struct crypto_cipher *tfm;
@@ -1691,7 +1681,7 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg)
return PTR_ERR(sk_tfm);
}
drbg->ctr_handle = sk_tfm;
- init_completion(&drbg->ctr_completion);
+ crypto_init_wait(&drbg->ctr_wait);
req = skcipher_request_alloc(sk_tfm, GFP_KERNEL);
if (!req) {
@@ -1700,8 +1690,9 @@ static int drbg_init_sym_kernel(struct drbg_state *drbg)
return -ENOMEM;
}
drbg->ctr_req = req;
- skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
- drbg_skcipher_cb, drbg);
+ skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG |
+ CRYPTO_TFM_REQ_MAY_SLEEP,
+ crypto_req_done, &drbg->ctr_wait);
alignmask = crypto_skcipher_alignmask(sk_tfm);
drbg->ctr_null_value_buf = kzalloc(DRBG_CTR_NULL_LEN + alignmask,
@@ -1762,21 +1753,12 @@ static int drbg_kcapi_sym_ctr(struct drbg_state *drbg,
/* Output buffer may not be valid for SGL, use scratchpad */
skcipher_request_set_crypt(drbg->ctr_req, &sg_in, &sg_out,
cryptlen, drbg->V);
- ret = crypto_skcipher_encrypt(drbg->ctr_req);
- switch (ret) {
- case 0:
- break;
- case -EINPROGRESS:
- case -EBUSY:
- wait_for_completion(&drbg->ctr_completion);
- if (!drbg->ctr_async_err) {
- reinit_completion(&drbg->ctr_completion);
- break;
- }
- default:
+ ret = crypto_wait_req(crypto_skcipher_encrypt(drbg->ctr_req),
+ &drbg->ctr_wait);
+ if (ret)
goto out;
- }
- init_completion(&drbg->ctr_completion);
+
+ crypto_init_wait(&drbg->ctr_wait);
memcpy(outbuf, drbg->outscratchpad, cryptlen);
diff --git a/include/crypto/drbg.h b/include/crypto/drbg.h
index 22f884c..8f94110 100644
--- a/include/crypto/drbg.h
+++ b/include/crypto/drbg.h
@@ -126,8 +126,7 @@ struct drbg_state {
__u8 *ctr_null_value; /* CTR mode aligned zero buf */
__u8 *outscratchpadbuf; /* CTR mode output scratchpad */
__u8 *outscratchpad; /* CTR mode aligned outbuf */
- struct completion ctr_completion; /* CTR mode async handler */
- int ctr_async_err; /* CTR mode async error */
+ struct crypto_wait ctr_wait; /* CTR mode async wait obj */
bool seeded; /* DRBG fully seeded? */
bool pr; /* Prediction resistance enabled? */
--
2.1.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v8 00/20] simplify crypto wait for async op Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:40 +0200 [PATCH v8 09/20] crypto: move drbg to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 03/20] net: use -EAGAIN for transient busy indication Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 04/20] crypto: remove redundant backlog checks on EBUSY Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 14/20] cifs: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 12/20] fscrypt: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 20/20] crypto: adapt api sample to use async. op wait Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 02/20] crypto: ccp: use -EAGAIN for transient busy indication Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 05/20] crypto: marvell/cesa: remove redundant backlog checks on EBUSY Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 08/20] crypto: move pub key to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 10/20] crypto: move gcm to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 07/20] crypto: move algif to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 19/20] crypto: mediatek: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 17/20] crypto: talitos: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 06/20] crypto: introduce crypto wait for async op Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 13/20] dm: move dm-verity to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 18/20] crypto: qce: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 16/20] crypto: tcrypt: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 15/20] ima: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200 [PATCH v8 11/20] crypto: move testmgr to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-09-05 14:50 +0200
csiph-web