From mboxrd@z Thu Jan 1 00:00:00 1970 From: Behan Webster Subject: Re: [PATCH v2] mac80211: LLVMLinux: Remove VLAIS usage from mac80211 Date: Sat, 08 Mar 2014 13:36:40 -0800 Message-ID: <531B8D68.7020801@converseincode.com> References: <1394177091.4653.1.camel@jlt4.sipsolutions.net> <1394241960-1764-1-git-send-email-behanw@converseincode.com> <1394243809.6972.4.camel@joe-AO722> <531A7D4F.7090303@converseincode.com> <20140308145309.GA1615@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Joe Perches , linville@tuxdriver.com, johannes@sipsolutions.net, davem@davemloft.net, linux-wireless@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, dwmw2@infradead.org, pageexec@freemail.hu, =?ISO-8859-1?Q?Jan-Simon_M=F6ller?= , =?ISO-8859-1?Q?Vin=ED?= =?ISO-8859-1?Q?cius_Tinti?= , Mark Charlebois To: Stanislaw Gruszka Return-path: In-Reply-To: <20140308145309.GA1615@redhat.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On 03/08/14 06:53, Stanislaw Gruszka wrote: > On Fri, Mar 07, 2014 at 06:15:43PM -0800, Behan Webster wrote: >> On 03/07/14 17:56, Joe Perches wrote: >>> On Fri, 2014-03-07 at 17:26 -0800, behanw@converseincode.com wrote: >>>> From: Jan-Simon M=F6ller >>>> >>>> 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_a= ead *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. > Could you explain that? It looks like aead_req_data can be bigger tha= n > original struct aead_req up to CRYPTO_MINALIGN bytes. IOW adding > CRYPTO_MINALIGN to size seems unneeded as aead_request->__ctx alignme= nt > requirement should by assured by proper sizeof(struct aead_request). True, possibly a few more bytes. Nothing significant. However, I will=20 fix this too. > Besides, why not add VLAIS feature to llvm instead of fixing all > programs that use it? You aren't the first to ask this (I certainly get asked this regularly)= =2E :) VLAIS is specifically disallowed by the C89, C99, and later C standards= =2E=20 VLAIS is also not an officially documented feature of gcc (It is a side= =20 effect from the support of other languages supported by the gcc=20 toolchain). The LLVM project won't add VLAIS support for these reasons,= =20 and because it would unnecessarily complicate their compiler=20 architecture with almost no appreciable gain. VLAIS is only used in a handful of places in the kernel (almost=20 exclusively in crypto related code), so changing it in the kernel not=20 only is easier, but also makes the kernel code C99 (and beyond)=20 compliant. Being standards compliant is important not only for clang,=20 but also for newer versions of gcc (though not yet in the case of VLAIS= ). VLAIS should not be confused with Variable Length Arrays (VLA) and=20 flexible members (undefined or zero length arrays at the end of a non=20 embedded struct) which are both explicitly in the C standards and=20 supported by both gcc and clang. Behan --=20 Behan Webster behanw@converseincode.com