Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1652299
| Path | csiph.com!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | Gilad Ben-Yossef <gilad@benyossef.com> |
| Newsgroups | linux.kernel |
| Subject | [PATCH v2 01/11] crypto: introduce crypto wait for async op |
| Date | Mon, 29 May 2017 10:30:03 +0200 |
| Message-ID | <tModR-5Cf-43@gated-at.bofh.it> (permalink) |
| References | <tModP-5Cf-5@gated-at.bofh.it> |
| X-Mailer | git-send-email 2.1.4 |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 113 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | Eric Biggers <ebiggers3@gmail.com>, Ofir Drang <ofir.drang@arm.com>, Pavel Shilovsky <pshilov@microsoft.com>, linux-crypto@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, keyrings@vger.kernel.org, linux-raid@vger.kernel.org, linux-cifs@vger.kernel.org, samba-technical@lists.samba.org, linux-fscrypt@vger.kernel.org, linux-ima-devel@lists.sourceforge.net, linux-ima-user@lists.sourceforge.net, linux-security-module@vger.kernel.org |
| X-Original-Date | Mon, 29 May 2017 11:22:48 +0300 |
| X-Original-Message-ID | <1496046180-21962-2-git-send-email-gilad@benyossef.com> |
| X-Original-References | <1496046180-21962-1-git-send-email-gilad@benyossef.com> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1652299 |
Show key headers only | View raw
Invoking a possibly async. crypto op and waiting for completion
while correctly handling backlog processing is a common task
in the crypto API implementation and outside users of it.
This patch adds a generic implementation for doing so in
preparation for using it across the board instead of hand
rolled versions.
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
CC: Eric Biggers <ebiggers3@gmail.com>
CC: Ofir Drang <ofir.drang@arm.com>
---
crypto/api.c | 13 +++++++++++++
include/linux/crypto.h | 41 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/crypto/api.c b/crypto/api.c
index 941cd4c..2a2479d 100644
--- a/crypto/api.c
+++ b/crypto/api.c
@@ -24,6 +24,7 @@
#include <linux/sched/signal.h>
#include <linux/slab.h>
#include <linux/string.h>
+#include <linux/completion.h>
#include "internal.h"
LIST_HEAD(crypto_alg_list);
@@ -595,5 +596,17 @@ int crypto_has_alg(const char *name, u32 type, u32 mask)
}
EXPORT_SYMBOL_GPL(crypto_has_alg);
+void crypto_req_done(struct crypto_async_request *req, int err)
+{
+ struct crypto_wait *wait = req->data;
+
+ if (err == -EINPROGRESS)
+ return;
+
+ wait->err = err;
+ complete(&wait->completion);
+}
+EXPORT_SYMBOL_GPL(crypto_req_done);
+
MODULE_DESCRIPTION("Cryptographic core API");
MODULE_LICENSE("GPL");
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 84da997..bb00186 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -24,6 +24,7 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/uaccess.h>
+#include <linux/completion.h>
/*
* Autoloaded crypto modules should only use a prefixed name to avoid allowing
@@ -468,6 +469,45 @@ struct crypto_alg {
} CRYPTO_MINALIGN_ATTR;
/*
+ * A helper struct for waiting for completion of async crypto ops
+ */
+struct crypto_wait {
+ struct completion completion;
+ int err;
+};
+
+/*
+ * Macro for declaring a crypto op async wait object on stack
+ */
+#define DECLARE_CRYPTO_WAIT(_wait) \
+ struct crypto_wait _wait = { \
+ COMPLETION_INITIALIZER_ONSTACK((_wait).completion), 0 }
+
+/*
+ * Async ops completion helper functioons
+ */
+void crypto_req_done(struct crypto_async_request *req, int err);
+
+static inline int crypto_wait_req(int err, struct crypto_wait *wait)
+{
+ switch (err) {
+ case -EINPROGRESS:
+ case -EBUSY:
+ wait_for_completion(&wait->completion);
+ reinit_completion(&wait->completion);
+ err = wait->err;
+ break;
+ };
+
+ return err;
+}
+
+static inline void crypto_init_wait(struct crypto_wait *wait)
+{
+ init_completion(&wait->completion);
+}
+
+/*
* Algorithm registration interface.
*/
int crypto_register_alg(struct crypto_alg *alg);
@@ -1604,5 +1644,6 @@ static inline int crypto_comp_decompress(struct crypto_comp *tfm,
src, slen, dst, dlen);
}
+
#endif /* _LINUX_CRYPTO_H */
--
2.1.4
Back to linux.kernel | Previous | Next — Previous in thread | Find similar | Unroll thread
[PATCH v2 00/11] introduce crypto wait for async op Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 04/11] crypto: move drbg to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 02/11] crypto: move algif to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 05/11] crypto: move gcm to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 10/11] ima: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 07/11] dm: move dm-verity to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 08/11] fscrypt: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 09/11] cifs: move to generic async completion Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200 [PATCH v2 01/11] crypto: introduce crypto wait for async op Gilad Ben-Yossef <gilad@benyossef.com> - 2017-05-29 10:30 +0200
csiph-web