On Fri, 2014-03-07 at 18:15 -0800, Behan Webster wrote:
> On 03/07/14 17:56, Joe Perches wrote:
> > On Fri, 2014-03-07 at 17:26 -0800, beh...@converseincode.com wrote:
> >> From: Jan-Simon Möller <dl...@gmx.de>
> >>
> >> Replaced the use of a Variable Length Array In Struct (VLAIS) with a C99
> >> compliant equivalent. This is the original VLAIS struct.
> > []
> >> diff --git a/net/mac80211/aes_ccm.c b/net/mac80211/aes_ccm.c
> > []
> >> @@ -23,12 +23,14 @@ void ieee80211_aes_ccm_encrypt(struct crypto_aead 
> >> *tfm, u8 *b_0, u8 *aad,
> >>                           u8 *data, size_t data_len, u8 *mic)
> >>   {
> >>    struct scatterlist assoc, pt, ct[2];
> >> -  struct {
> >> -          struct aead_request     req;
> >> -          u8                      priv[crypto_aead_reqsize(tfm)];
> >> -  } aead_req;
> >>   
> >> -  memset(&aead_req, 0, sizeof(aead_req));
> >> +  char aead_req_data[sizeof(struct aead_request) +
> >> +                          crypto_aead_reqsize(tfm) +
> >> +                          CRYPTO_MINALIGN] CRYPTO_MINALIGN_ATTR;
> > Can this be a too large amount of stack?
> >
> > Is crypto_aead_reqsize() limited to < ~1k?
> >
> > Perhaps it'd be better to use kzalloc for this
> > or another reserved pool
> No more stack being used than with the the original code. The stack 
> memory use is identical.

I do understand that, but that's not my question.

I appreciate you're getting this to compile for llvm.

Any idea of the max value of crypto_aead_reqsize?

include/linux/crypto.h:static inline unsigned int crypto_aead_reqsize(struct 
crypto_aead *tfm)
include/linux/crypto.h-{
include/linux/crypto.h- return crypto_aead_crt(tfm)->reqsize;
include/linux/crypto.h-}

$ grep-2.5.4 -rP --include=*.[ch] "(?:->|\.)\s*\breqsize\s*=[^=][^;]+;" *
arch/x86/crypto/aesni-intel_glue.c:     tfm->crt_aead.reqsize = sizeof(struct 
aead_request)
                + crypto_aead_reqsize(&cryptd_tfm->base);
crypto/chainiv.c:       tfm->crt_ablkcipher.reqsize = sizeof(struct 
ablkcipher_request);
crypto/authenc.c:       tfm->crt_aead.reqsize = sizeof(struct 
authenc_request_ctx) +
                                ctx->reqoff +
                                max_t(unsigned int,
                                crypto_ahash_reqsize(auth) +
                                sizeof(struct ahash_request),
                                sizeof(struct skcipher_givcrypt_request) +
                                crypto_ablkcipher_reqsize(enc));
crypto/authencesn.c:    tfm->crt_aead.reqsize = sizeof(struct 
authenc_esn_request_ctx) +
                                ctx->reqoff +
                                max_t(unsigned int,
                                crypto_ahash_reqsize(auth) +
                                sizeof(struct ahash_request),
                                sizeof(struct skcipher_givcrypt_request) +
                                crypto_ablkcipher_reqsize(enc));
crypto/shash.c: crt->reqsize = sizeof(struct shash_desc) + 
crypto_shash_descsize(shash);
crypto/cryptd.c:        tfm->crt_ablkcipher.reqsize =
                sizeof(struct cryptd_blkcipher_request_ctx);
crypto/cryptd.c:        tfm->crt_aead.reqsize = sizeof(struct 
cryptd_aead_request_ctx);
crypto/seqiv.c: tfm->crt_ablkcipher.reqsize = sizeof(struct ablkcipher_request);
crypto/seqiv.c: tfm->crt_aead.reqsize = sizeof(struct aead_request);
crypto/ablk_helper.c:   tfm->crt_ablkcipher.reqsize = sizeof(struct 
ablkcipher_request) +
                crypto_ablkcipher_reqsize(&cryptd_tfm->base);
crypto/ctr.c:   tfm->crt_ablkcipher.reqsize = align +
                sizeof(struct crypto_rfc3686_req_ctx) +
                crypto_ablkcipher_reqsize(cipher);
crypto/eseqiv.c:        tfm->crt_ablkcipher.reqsize = reqsize +
                                      sizeof(struct ablkcipher_request);
crypto/ccm.c:   tfm->crt_aead.reqsize = align +
                                sizeof(struct crypto_ccm_req_priv_ctx) +
                                crypto_ablkcipher_reqsize(ctr);
crypto/ccm.c:   tfm->crt_aead.reqsize = sizeof(struct aead_request) +
                                ALIGN(crypto_aead_reqsize(aead),
                                      crypto_tfm_ctx_alignment()) +
                                align + 16;
crypto/gcm.c:   tfm->crt_aead.reqsize = align +
                offsetof(struct crypto_gcm_req_priv_ctx, u) +
                max(sizeof(struct ablkcipher_request) +
                    crypto_ablkcipher_reqsize(ctr),
                    sizeof(struct ahash_request) +
                    crypto_ahash_reqsize(ghash));
crypto/gcm.c:   tfm->crt_aead.reqsize = sizeof(struct aead_request) +
                                ALIGN(crypto_aead_reqsize(aead),
                                      crypto_tfm_ctx_alignment()) +
                                align + 16;
crypto/gcm.c:   tfm->crt_aead.reqsize = sizeof(struct crypto_rfc4543_req_ctx) +
                                ALIGN(crypto_aead_reqsize(aead),
                                      crypto_tfm_ctx_alignment()) +
                                align + 16;
crypto/pcrypt.c:        tfm->crt_aead.reqsize = sizeof(struct pcrypt_request)
                + sizeof(struct aead_givcrypt_request)
                + crypto_aead_reqsize(cipher);
drivers/staging/sep/sep_crypto.c:       tfm->crt_ablkcipher.reqsize = 
sizeof(struct this_task_ctx);
drivers/crypto/n2_core.c:       tfm->crt_ablkcipher.reqsize = sizeof(struct 
n2_request_context);
drivers/crypto/mxs-dcp.c:       tfm->crt_ablkcipher.reqsize = sizeof(struct 
dcp_aes_req_ctx);
drivers/crypto/sahara.c:        tfm->crt_ablkcipher.reqsize = sizeof(struct 
sahara_aes_reqctx);
drivers/crypto/ccp/ccp-crypto-aes.c:    tfm->crt_ablkcipher.reqsize = 
sizeof(struct ccp_aes_req_ctx);
drivers/crypto/ccp/ccp-crypto-aes.c:    tfm->crt_ablkcipher.reqsize = 
sizeof(struct ccp_aes_req_ctx);
drivers/crypto/ccp/ccp-crypto-aes-xts.c:        tfm->crt_ablkcipher.reqsize = 
sizeof(struct ccp_aes_req_ctx) +
                                      fallback_tfm->base.crt_ablkcipher.reqsize;
drivers/crypto/s5p-sss.c:       tfm->crt_ablkcipher.reqsize = sizeof(struct 
s5p_aes_reqctx);
drivers/crypto/atmel-aes.c:     tfm->crt_ablkcipher.reqsize = sizeof(struct 
atmel_aes_reqctx);
drivers/crypto/ixp4xx_crypto.c: tfm->crt_ablkcipher.reqsize = sizeof(struct 
ablk_ctx);
drivers/crypto/ixp4xx_crypto.c: tfm->crt_aead.reqsize = sizeof(struct aead_ctx);
drivers/crypto/omap-des.c:      tfm->crt_ablkcipher.reqsize = sizeof(struct 
omap_des_reqctx);
drivers/crypto/mv_cesa.c:       tfm->crt_ablkcipher.reqsize = sizeof(struct 
mv_req_ctx);
drivers/crypto/omap-aes.c:      tfm->crt_ablkcipher.reqsize = sizeof(struct 
omap_aes_reqctx);
drivers/crypto/hifn_795x.c:     tfm->crt_ablkcipher.reqsize = sizeof(struct 
hifn_request_context);
drivers/crypto/amcc/crypto4xx_core.c:           tfm->crt_ablkcipher.reqsize = 
sizeof(struct crypto4xx_ctx);
drivers/crypto/atmel-tdes.c:    tfm->crt_ablkcipher.reqsize = sizeof(struct 
atmel_tdes_reqctx);
drivers/crypto/picoxcell_crypto.c:      tfm->crt_aead.reqsize = sizeof(struct 
spacc_req);
drivers/crypto/picoxcell_crypto.c:      tfm->crt_ablkcipher.reqsize = 
sizeof(struct spacc_req);
include/crypto/internal/hash.h: tfm->reqsize = reqsize;


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to