linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/28] simplify crypto wait for async op
@ 2017-07-02 14:41 Gilad Ben-Yossef
  2017-07-02 14:41 ` [PATCH v3 01/28] crypto: change backlog return code to -EIOCBQUEUED Gilad Ben-Yossef
                   ` (27 more replies)
  0 siblings, 28 replies; 31+ messages in thread
From: Gilad Ben-Yossef @ 2017-07-02 14:41 UTC (permalink / raw)
  To: Herbert Xu, David S. Miller, Jonathan Corbet, David Howells,
	Tom Lendacky, Gary Hook, Boris Brezillon, Arnaud Ebalard,
	Matthias Brugger, Alasdair Kergon, Mike Snitzer, dm-devel,
	Shaohua Li, Steve French, Theodore Y. Ts'o, Jaegeuk Kim,
	Mimi Zohar, Dmitry Kasatkin, James Morris, Serge E. Hallyn,
	linux-crypto, linux-doc, linux-kernel, keyrings,
	linux-arm-kernel, linux-mediatek, linux-raid, linux-cifs,
	samba-technical, linux-fscrypt, linux-ima-devel, linux-ima-user,
	linux-security-module
  Cc: Ofir Drang

Many users of kernel async. crypto services have a pattern of
starting an async. crypto op and than using a completion
to wait for it to end.

This patch set simplifies this common use case in two ways:

First, by giving the case where a request was queued to the
backlog a separate return code (-EIOCBQUEUED) of its own
rather than sharing the -EBUSY return code with the fatal
error of a busy provider when backlog is not enabled.

Next, this change is than built on to create a generic way
to wait for a async. crypto operation to complete.

The end result is that after replacing all the call sites
I could find, the code is smaller by ~340 lines, a branch
is saved in some cases in run-time and the code is more
straightforward to follow.

Please note that patches 1-13 should be squashed together
when applied in order to function correctly. They are
only separated out to ease review.

The patch set was boot tested on x86_64 and arm64 which
at the very least tests the crypto users via testmgr and
tcrypt but I do note that I do not have access to some
of the HW whose drivers are modified nor do I claim I was
able to test all of the corner cases.

Last but not least, I do apologize for the size of this
patch set and number of recipients, but I did have to
touch every crypto async API user in the kernel. May the
340 deleted lines serve as penance for my sin :-)

Changes from v2:
- Patch title changed from "introduce crypto wait for
  async op" to better reflect the current state.
- Rebase on top of latest linux-next.
- Add a new return code of -EIOCBQUEUED for backlog
  queueing, as suggested by Herbert Xu.
- Transform more users to the new API.
- Update the drbg change to account for new init as
  indicated by Stephan Muller.

Changes from v1:
- Address review comments from Eric Biggers.
- Separated out bug fixes of existing code and rebase
  on top of that patch set.
- Rename 'ecr' to 'wait' in fscrypto code.
- Split patch introducing the new API from the change
  moving over the algif code which it originated from
  to the new API.
- Inline crypto_wait_req().
- Some code indentation fixes.

Gilad Ben-Yossef (28):
  crypto: change backlog return code to -EIOCBQUEUED
  crypto: atmel: use -EIOCBQUEUED for backlog indication
  crypto: ccm: use -EIOCBQUEUED for backlog indication
  crypto: marvell/cesa: use -EIOCBQUEUED for backlog indication
  crypto: mediatek: use -EIOCBQUEUED for backlog indication
  crypto: omap: use -EIOCBQUEUED for backlog indication
  crypto: qce: use -EIOCBQUEUED for backlog indication
  crypto: talitos: use -EIOCBQUEUED for backlog indication
  dm: verity: use -EIOCBQUEUED for backlog indication
  fscrypt: use -EIOCBQUEUED for backlog indication
  cifs: use -EIOCBQUEUED for backlog indication
  ima: use -EIOCBQUEUED for backlog indication
  crypto: adapt api sample to -EIOCBQUEUED as backlog indication
  crypto: introduce crypto wait for async op
  crypto: move algif to generic async completion
  crypto: move pub key to generic async completion
  crypto: move drbg to generic async completion
  crypto: move gcm to generic async completion
  crypto: move testmgr to generic async completion
  dm: move dm-verity to generic async completion
  fscrypt: move to generic async completion
  cifs: move to generic async completion
  ima: move to generic async completion
  crypto: tcrypt: move to generic async completion
  crypto: talitos: move to generic async completion
  crypto: qce: move to generic async completion
  crypto: mediatek: move to generic async completion
  crypto: adapt api sample to use async. op wait

 Documentation/crypto/api-samples.rst |  52 ++-------
 crypto/af_alg.c                      |  27 -----
 crypto/ahash.c                       |  12 +--
 crypto/algapi.c                      |   6 +-
 crypto/algif_aead.c                  |  14 +--
 crypto/algif_hash.c                  |  29 +++--
 crypto/algif_skcipher.c              |  15 ++-
 crypto/api.c                         |  13 +++
 crypto/asymmetric_keys/public_key.c  |  28 +----
 crypto/chacha20poly1305.c            |   2 +-
 crypto/cryptd.c                      |   4 +-
 crypto/cts.c                         |   6 +-
 crypto/drbg.c                        |  36 ++-----
 crypto/gcm.c                         |  32 ++----
 crypto/lrw.c                         |   8 +-
 crypto/rsa-pkcs1pad.c                |  16 +--
 crypto/tcrypt.c                      |  84 +++++----------
 crypto/testmgr.c                     | 204 ++++++++++++-----------------------
 crypto/xts.c                         |   8 +-
 drivers/crypto/atmel-sha.c           |   2 +-
 drivers/crypto/ccp/ccp-crypto-main.c |  10 +-
 drivers/crypto/ccp/ccp-dev.c         |   8 +-
 drivers/crypto/ccp/ccp-dmaengine.c   |   2 +-
 drivers/crypto/marvell/cesa.c        |   2 +-
 drivers/crypto/marvell/cesa.h        |   2 +-
 drivers/crypto/mediatek/mtk-aes.c    |  31 +-----
 drivers/crypto/mediatek/mtk-sha.c    |   2 +-
 drivers/crypto/omap-sham.c           |   2 +-
 drivers/crypto/qce/sha.c             |  30 +-----
 drivers/crypto/talitos.c             |  39 +------
 drivers/md/dm-verity-target.c        |  81 ++++----------
 drivers/md/dm-verity.h               |   5 -
 fs/cifs/smb2ops.c                    |  30 +-----
 fs/crypto/crypto.c                   |  29 +----
 fs/crypto/fname.c                    |  36 ++-----
 fs/crypto/fscrypt_private.h          |  10 --
 fs/crypto/keyinfo.c                  |  21 +---
 include/crypto/drbg.h                |   3 +-
 include/crypto/if_alg.h              |  14 ---
 include/linux/crypto.h               |  40 +++++++
 security/integrity/ima/ima_crypto.c  |  56 +++-------
 41 files changed, 305 insertions(+), 746 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2017-07-03 13:23 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-02 14:41 [PATCH v3 00/28] simplify crypto wait for async op Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 01/28] crypto: change backlog return code to -EIOCBQUEUED Gilad Ben-Yossef
2017-07-03 12:35   ` Herbert Xu
2017-07-03 13:23     ` Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 02/28] crypto: atmel: use -EIOCBQUEUED for backlog indication Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 03/28] crypto: ccm: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 04/28] crypto: marvell/cesa: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 05/28] crypto: mediatek: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 06/28] crypto: omap: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 07/28] crypto: qce: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 08/28] crypto: talitos: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 09/28] dm: verity: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 10/28] fscrypt: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 11/28] cifs: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 12/28] ima: " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 13/28] crypto: adapt api sample to -EIOCBQUEUED as " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 14/28] crypto: introduce crypto wait for async op Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 15/28] crypto: move algif to generic async completion Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 16/28] crypto: move pub key " Gilad Ben-Yossef
2017-07-02 14:41 ` [PATCH v3 17/28] crypto: move drbg " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 18/28] crypto: move gcm " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 19/28] crypto: move testmgr " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 20/28] dm: move dm-verity " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 21/28] fscrypt: move " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 22/28] cifs: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 23/28] ima: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 24/28] crypto: tcrypt: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 25/28] crypto: talitos: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 26/28] crypto: qce: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 27/28] crypto: mediatek: " Gilad Ben-Yossef
2017-07-02 14:42 ` [PATCH v3 28/28] crypto: adapt api sample to use async. op wait Gilad Ben-Yossef

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).