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, behanw@xxxxxxxxxxxxxxxxxx wrote: > >> From: Jan-Simon Möller <dl9pf@xxxxxx> > >> > >> 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-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html