From patchwork Sun Jul 2 14:41:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gilad Ben-Yossef X-Patchwork-Id: 106840 Delivered-To: patch@linaro.org Received: by 10.182.135.102 with SMTP id pr6csp8291626obb; Sun, 2 Jul 2017 07:42:36 -0700 (PDT) X-Received: by 10.84.225.145 with SMTP id u17mr5722448plj.255.1499006556144; Sun, 02 Jul 2017 07:42:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499006556; cv=none; d=google.com; s=arc-20160816; b=VWqwqq+32saIJZ2a2TWFZHlL8w05JNDSLDmVQLiS7Itfs+jZckFbgq8wlYf4RuHjOG BWYWhWO7zIVtK67gRNDwJdN1TjMOiPNhoetNDtGLubZ6Y+cgL+yo5J2aT0VPuULJSF87 OBhEfY6PR5k3bZJ3Z1Z5vO0v0z3seu0EGFj2N5UGgVPWI8O4+EijAUivLPAYARzc6yTD QbeaN13WacXD4+gOxySZl5uQhXPMk+m1IOlDyyTw0DI6yfYHVucUbVNfBz7NahCRjaLd HlkPaoZK7bNA7e8anopFEtCzI067/BdDv9SZ1Hq72yj3si5g7979oIx30X6ATOLSWCxj Dssw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=+C5PBpFVoVtO9MRYtlrEc3EyERmG9aqppnU3evKu7uQ=; b=FjiVmP+1H5IvQrUzZJ3XzXgXH5/AipAQARcVNf+7XdlS78yPKRXLwKr99UDjwdOyYH AXY2DCGg2UDCHVwK1AKHxF7+uDTdD+5ZaQQNS6zSkvScVyeKXOiC78kqeZ9Xq0UoeoEg 7ju46rk9TNmCrBVttAiIfitKmmf8dQzRfru3x5FEqCsi1QV416kYe74SNsfTtt9l6E/4 PxZIzI11t6XCqiGD40iHzqb2BfWl2P3JIS+aQNOKkHWMfNmpX0ScvFYhAqwM3VEq0Foo mCrIPhx3Al9WqQxTzl+AvKAinwUIMT2soc7km1eo94MfoOPrT2P0JVZP+UFHJslga1fL wzXA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t127si10330448pgc.101.2017.07.02.07.42.35; Sun, 02 Jul 2017 07:42:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751764AbdGBOme (ORCPT + 1 other); Sun, 2 Jul 2017 10:42:34 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:53360 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750818AbdGBOmb (ORCPT ); Sun, 2 Jul 2017 10:42:31 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7AFEF344; Sun, 2 Jul 2017 07:42:30 -0700 (PDT) Received: from localhost.localdomain (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4945C3F578; Sun, 2 Jul 2017 07:42:22 -0700 (PDT) From: Gilad Ben-Yossef 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@redhat.com, Shaohua Li , Steve French , "Theodore Y. Ts'o" , Jaegeuk Kim , Mimi Zohar , Dmitry Kasatkin , James Morris , "Serge E. Hallyn" , linux-crypto@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, keyrings@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.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 Cc: Ofir Drang Subject: [PATCH v3 00/28] simplify crypto wait for async op Date: Sun, 2 Jul 2017 17:41:42 +0300 Message-Id: <1499006535-19760-1-git-send-email-gilad@benyossef.com> X-Mailer: git-send-email 2.1.4 Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org 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