From: Kees Cook <keescook@chromium.org> To: Herbert Xu <herbert@gondor.apana.org.au> Cc: Kees Cook <keescook@chromium.org>, Eric Biggers <ebiggers@google.com>, Ard Biesheuvel <ard.biesheuvel@linaro.org>, Gilad Ben-Yossef <gilad@benyossef.com>, Alexander Stein <alexander.stein@systec-electronic.com>, Antoine Tenart <antoine.tenart@bootlin.com>, Boris Brezillon <boris.brezillon@bootlin.com>, Arnaud Ebalard <arno@natisbad.org>, Corentin Labbe <clabbe.montjoie@gmail.com>, Maxime Ripard <maxime.ripard@bootlin.com>, Chen-Yu Tsai <wens@csie.org>, Christian Lamparter <chunkeey@gmail.com>, Philippe Ombredanne <pombredanne@nexb.com>, Jonathan Cameron <Jonathan.Cameron@huawei.com>, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 2/4] crypto: skcipher - Enforce non-ASYNC for on-stack requests Date: Thu, 6 Sep 2018 15:58:52 -0700 [thread overview] Message-ID: <20180906225854.40989-3-keescook@chromium.org> (raw) In-Reply-To: <20180906225854.40989-1-keescook@chromium.org> Check at use-time whether an skcipher request is on the stack. If it is, enforce that it must be backed by a synchronous algorithm, as is required: https://www.redhat.com/archives/dm-devel/2018-January/msg00087.html Co-developed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Kees Cook <keescook@chromium.org> --- include/crypto/skcipher.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/include/crypto/skcipher.h b/include/crypto/skcipher.h index 6e954d398e0f..3aabd5d098ed 100644 --- a/include/crypto/skcipher.h +++ b/include/crypto/skcipher.h @@ -19,6 +19,7 @@ /** * struct skcipher_request - Symmetric key cipher request + * @__onstack: 1 if the request was allocated by SKCIPHER_REQUEST_ON_STACK * @cryptlen: Number of bytes to encrypt or decrypt * @iv: Initialisation Vector * @src: Source SG list @@ -27,6 +28,7 @@ * @__ctx: Start of private context data */ struct skcipher_request { + unsigned char __onstack; unsigned int cryptlen; u8 *iv; @@ -139,9 +141,12 @@ struct skcipher_alg { struct crypto_alg base; }; +/* + * This must only ever be used with synchronous algorithms. + */ #define SKCIPHER_REQUEST_ON_STACK(name, tfm) \ char __##name##_desc[sizeof(struct skcipher_request) + \ - crypto_skcipher_reqsize(tfm)] CRYPTO_MINALIGN_ATTR; \ + crypto_skcipher_reqsize(tfm)] CRYPTO_MINALIGN_ATTR = { 1 }; \ struct skcipher_request *name = (void *)__##name##_desc /** @@ -437,6 +442,12 @@ static inline struct crypto_skcipher *crypto_skcipher_reqtfm_check( { struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + if (req->__onstack) { + if (WARN_ON(crypto_skcipher_alg(tfm)->base.cra_flags & + CRYPTO_ALG_ASYNC)) + return ERR_PTR(-EINVAL); + } + if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) return ERR_PTR(-ENOKEY); -- 2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: keescook@chromium.org (Kees Cook) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 2/4] crypto: skcipher - Enforce non-ASYNC for on-stack requests Date: Thu, 6 Sep 2018 15:58:52 -0700 [thread overview] Message-ID: <20180906225854.40989-3-keescook@chromium.org> (raw) In-Reply-To: <20180906225854.40989-1-keescook@chromium.org> Check at use-time whether an skcipher request is on the stack. If it is, enforce that it must be backed by a synchronous algorithm, as is required: https://www.redhat.com/archives/dm-devel/2018-January/msg00087.html Co-developed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Kees Cook <keescook@chromium.org> --- include/crypto/skcipher.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/include/crypto/skcipher.h b/include/crypto/skcipher.h index 6e954d398e0f..3aabd5d098ed 100644 --- a/include/crypto/skcipher.h +++ b/include/crypto/skcipher.h @@ -19,6 +19,7 @@ /** * struct skcipher_request - Symmetric key cipher request + * @__onstack: 1 if the request was allocated by SKCIPHER_REQUEST_ON_STACK * @cryptlen: Number of bytes to encrypt or decrypt * @iv: Initialisation Vector * @src: Source SG list @@ -27,6 +28,7 @@ * @__ctx: Start of private context data */ struct skcipher_request { + unsigned char __onstack; unsigned int cryptlen; u8 *iv; @@ -139,9 +141,12 @@ struct skcipher_alg { struct crypto_alg base; }; +/* + * This must only ever be used with synchronous algorithms. + */ #define SKCIPHER_REQUEST_ON_STACK(name, tfm) \ char __##name##_desc[sizeof(struct skcipher_request) + \ - crypto_skcipher_reqsize(tfm)] CRYPTO_MINALIGN_ATTR; \ + crypto_skcipher_reqsize(tfm)] CRYPTO_MINALIGN_ATTR = { 1 }; \ struct skcipher_request *name = (void *)__##name##_desc /** @@ -437,6 +442,12 @@ static inline struct crypto_skcipher *crypto_skcipher_reqtfm_check( { struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + if (req->__onstack) { + if (WARN_ON(crypto_skcipher_alg(tfm)->base.cra_flags & + CRYPTO_ALG_ASYNC)) + return ERR_PTR(-EINVAL); + } + if (crypto_skcipher_get_flags(tfm) & CRYPTO_TFM_NEED_KEY) return ERR_PTR(-ENOKEY); -- 2.17.1
next prev parent reply other threads:[~2018-09-06 22:58 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-09-06 22:58 [PATCH v2 0/4] crypto: skcipher - Remove VLA usage Kees Cook 2018-09-06 22:58 ` Kees Cook 2018-09-06 22:58 ` [PATCH v2 1/4] crypto: skcipher - Consolidate encrypt/decrypt sanity check Kees Cook 2018-09-06 22:58 ` Kees Cook 2018-09-06 22:58 ` Kees Cook [this message] 2018-09-06 22:58 ` [PATCH v2 2/4] crypto: skcipher - Enforce non-ASYNC for on-stack requests Kees Cook 2018-09-07 3:42 ` Herbert Xu 2018-09-07 3:42 ` Herbert Xu 2018-09-07 6:56 ` Ard Biesheuvel 2018-09-07 6:56 ` Ard Biesheuvel 2018-09-07 6:56 ` Ard Biesheuvel 2018-09-11 5:52 ` Herbert Xu 2018-09-11 5:52 ` Herbert Xu 2018-09-11 5:52 ` Herbert Xu 2018-09-13 16:46 ` Kees Cook 2018-09-13 16:46 ` Kees Cook 2018-09-13 16:46 ` Kees Cook 2018-09-13 17:40 ` Kees Cook 2018-09-13 17:40 ` Kees Cook 2018-09-13 17:40 ` Kees Cook 2018-09-07 16:02 ` Kees Cook 2018-09-07 16:02 ` Kees Cook 2018-09-11 5:53 ` Herbert Xu 2018-09-11 5:53 ` Herbert Xu 2018-09-06 22:58 ` [PATCH v2 3/4] crypto: skcipher - Remove VLA usage for SKCIPHER_REQUEST_ON_STACK Kees Cook 2018-09-06 22:58 ` Kees Cook 2018-09-06 22:58 ` [PATCH 4/4] crypto: skcipher - Remove unused argument to SKCIPHER_REQUEST_ON_STACK() Kees Cook 2018-09-06 22:58 ` Kees Cook
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180906225854.40989-3-keescook@chromium.org \ --to=keescook@chromium.org \ --cc=Jonathan.Cameron@huawei.com \ --cc=alexander.stein@systec-electronic.com \ --cc=antoine.tenart@bootlin.com \ --cc=ard.biesheuvel@linaro.org \ --cc=arno@natisbad.org \ --cc=boris.brezillon@bootlin.com \ --cc=chunkeey@gmail.com \ --cc=clabbe.montjoie@gmail.com \ --cc=ebiggers@google.com \ --cc=gilad@benyossef.com \ --cc=herbert@gondor.apana.org.au \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-crypto@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=maxime.ripard@bootlin.com \ --cc=pombredanne@nexb.com \ --cc=wens@csie.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.