aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-02-27 10:30:56 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2017-02-28 04:29:17 -0500
commit3b30460c5b0ed762be75a004e924ec3f8711e032 (patch)
tree20685fb789a0da94779dc6a97dc3c37eb4286d35
parent89027579bc6c2febbcc9c2f9d5069adf71539e4b (diff)
crypto: ccm - move cbcmac input off the stack
Commit f15f05b0a5de ("crypto: ccm - switch to separate cbcmac driver") refactored the CCM driver to allow separate implementations of the underlying MAC to be provided by a platform. However, in doing so, it moved some data from the linear region to the stack, which violates the SG constraints when the stack is virtually mapped. So move idata/odata back to the request ctx struct, of which we can reasonably expect that it has been allocated using kmalloc() et al. Reported-by: Johannes Berg <johannes@sipsolutions.net> Fixes: f15f05b0a5de ("crypto: ccm - switch to separate cbcmac driver") Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/ccm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/crypto/ccm.c b/crypto/ccm.c
index 442848807a52..1ce37ae0ce56 100644
--- a/crypto/ccm.c
+++ b/crypto/ccm.c
@@ -45,6 +45,7 @@ struct crypto_rfc4309_req_ctx {
45 45
46struct crypto_ccm_req_priv_ctx { 46struct crypto_ccm_req_priv_ctx {
47 u8 odata[16]; 47 u8 odata[16];
48 u8 idata[16];
48 u8 auth_tag[16]; 49 u8 auth_tag[16];
49 u32 flags; 50 u32 flags;
50 struct scatterlist src[3]; 51 struct scatterlist src[3];
@@ -183,8 +184,8 @@ static int crypto_ccm_auth(struct aead_request *req, struct scatterlist *plain,
183 AHASH_REQUEST_ON_STACK(ahreq, ctx->mac); 184 AHASH_REQUEST_ON_STACK(ahreq, ctx->mac);
184 unsigned int assoclen = req->assoclen; 185 unsigned int assoclen = req->assoclen;
185 struct scatterlist sg[3]; 186 struct scatterlist sg[3];
186 u8 odata[16]; 187 u8 *odata = pctx->odata;
187 u8 idata[16]; 188 u8 *idata = pctx->idata;
188 int ilen, err; 189 int ilen, err;
189 190
190 /* format control data for input */ 191 /* format control data for input */