From patchwork Mon Oct 17 22:13:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101672 Delivered-To: patch@linaro.org Received: by 10.140.97.247 with SMTP id m110csp597162qge; Mon, 17 Oct 2016 15:17:07 -0700 (PDT) X-Received: by 10.99.123.90 with SMTP id k26mr33848160pgn.23.1476742627553; Mon, 17 Oct 2016 15:17:07 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j28si32488947pfa.283.2016.10.17.15.17.07; Mon, 17 Oct 2016 15:17:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759183AbcJQWQx (ORCPT + 1 other); Mon, 17 Oct 2016 18:16:53 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:51064 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759383AbcJQWQt (ORCPT ); Mon, 17 Oct 2016 18:16:49 -0400 Received: from wuerfel.lan. ([78.43.20.153]) by mrelayeu.kundenserver.de (mreue004) with ESMTPA (Nemesis) id 0Ldqqt-1cehoj2kzr-00ixlw; Tue, 18 Oct 2016 00:14:46 +0200 From: Arnd Bergmann To: Herbert Xu , x86@kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Arnd Bergmann , "David S. Miller" , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Borislav Petkov , Stephan Mueller , linux-crypto@vger.kernel.org Subject: [PATCH 15/28] crypto: aesni: avoid -Wmaybe-uninitialized warning Date: Tue, 18 Oct 2016 00:13:36 +0200 Message-Id: <20161017221355.1861551-3-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20161017220342.1627073-1-arnd@arndb.de> References: <20161017220342.1627073-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K0:SAEMiQlliVUSogP9CVbITDytmswWsCkqGojIynggaYbZWdmS7i6 Cwh/ue3iLgcTnLpFn3vX07PbcYb29mN9UmyKwaNcvvSklqM2oUfsLoMLY6fD2u9RLYu7D2F dNDP8u6bvZ5kSaKQ76TD7z5IJshluo0SvFJX9vdkxhfj8HJiWkdvx1brkWIq00qDC1zXA6x 5Kp5YVYWXAk7Ht7Dvflzg== X-UI-Out-Filterresults: notjunk:1; V01:K0:/gzVgx/UYhY=:m6vqkzpyEpjU35bBFJCRtX MTDI93aAouEtYqCwZZt5KSc/afEOZmV3AHfaXWmRkE32PgGM8P1IHVm/otJrQ1tUXGbDMnN/H 3WnfGIclfxN0vrpAAwthlMX0ahbX4qDNWQhP1XCd1Ur9NPOw5SOqsC/hwhbuRQCPwLF+tD8fs qgelpZyTBzs87E+qpyk5nmACA8QisjdV2LYR6aar1lBixjH/FWBF+H+6YsvcDTGdcQTA1vzS3 6sITlzgkylPx1PMjB+Wr368Bfxm0M1jWWjTYUQ9BnD4lnITLbnfUrGz6VUZAIUUW1nE6Wzc3B RPrmYrCGi2ibc5YVqObd78Ui5y7MOQyflNdIk0+hDwkg890BtdZe+hkH3ruUsGT7PHTP8a4W2 x3LLZgR0nnVYXp+QWEWCk86rLaaMgV8jWOfrG8aVeFW+Bcns7+FbIslyfzcUR2YEuR6bgt30M HcDcDnaHckWltNoJRKMMogd0GBECHSPGf7Ny1JAQnyh6AzVRCoN+9LZ79tc1TOpV8vo7HLvA0 D1l0U7ZWubKGTTcA97MYSRkYlVKfYzds8EBg6+lnZof9ujskCfCE9Rv/d5s5ng9FUYlsM/IFl E2n8ECp39vtRBuP9GH7JHP/udRucc2m6/2DdDsMdUhNLZcbZNbp2HeBrjRfUsN3t9HtwIzRiY m0QE+6hg3zU7PiQCw9EYWblfbFQEZEopE0m0UAuvlZHBLqng+0ZRQQB0L8usRecVoE5vucErs efunMstvSz5SzDuO Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org The rfc4106 encrypy/decrypt helper functions cause an annoying false-positive warning in allmodconfig if we turn on -Wmaybe-uninitialized warnings again: arch/x86/crypto/aesni-intel_glue.c: In function ‘helper_rfc4106_decrypt’: include/linux/scatterlist.h:67:31: warning: ‘dst_sg_walk.sg’ may be used uninitialized in this function [-Wmaybe-uninitialized] The problem seems to be that the compiler doesn't track the state of the 'one_entry_in_sg' variable across the kernel_fpu_begin/kernel_fpu_end section. This reorganizes the code to avoid that variable and have the shared code in a separate function to avoid some of the conditional branches. The resulting functions are a bit longer but also slightly less complex, leaving no room for speculation on the part of the compiler. Cc: Herbert Xu Signed-off-by: Arnd Bergmann --- The conversion is nontrivial, and I have only build-tested it, so this could use a careful review and testing. --- arch/x86/crypto/aesni-intel_glue.c | 121 ++++++++++++++++++++++--------------- 1 file changed, 73 insertions(+), 48 deletions(-) -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index 0ab5ee1..054155b 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c @@ -269,6 +269,34 @@ static void (*aesni_gcm_dec_tfm)(void *ctx, u8 *out, u8 *hash_subkey, const u8 *aad, unsigned long aad_len, u8 *auth_tag, unsigned long auth_tag_len); +static inline void aesni_do_gcm_enc_tfm(void *ctx, u8 *out, + const u8 *in, unsigned long plaintext_len, u8 *iv, + u8 *hash_subkey, const u8 *aad, unsigned long aad_len, + u8 *auth_tag, unsigned long auth_tag_len) +{ + kernel_fpu_begin(); + aesni_gcm_enc_tfm(ctx, out, in, plaintext_len, iv, hash_subkey, + aad, aad_len, auth_tag, auth_tag_len); + kernel_fpu_end(); +} + +static inline int aesni_do_gcm_dec_tfm(void *ctx, u8 *out, + const u8 *in, unsigned long ciphertext_len, u8 *iv, + u8 *hash_subkey, const u8 *aad, unsigned long aad_len, + u8 *auth_tag, unsigned long auth_tag_len) +{ + kernel_fpu_begin(); + aesni_gcm_dec_tfm(ctx, out, in, ciphertext_len, iv, hash_subkey, aad, + aad_len, auth_tag, auth_tag_len); + kernel_fpu_end(); + + /* Compare generated tag with passed in tag. */ + if (crypto_memneq(in + ciphertext_len, auth_tag, auth_tag_len)) + return -EBADMSG; + + return 0; +} + static inline struct aesni_rfc4106_gcm_ctx *aesni_rfc4106_gcm_ctx_get(struct crypto_aead *tfm) { @@ -879,7 +907,6 @@ static int rfc4106_set_authsize(struct crypto_aead *parent, static int helper_rfc4106_encrypt(struct aead_request *req) { - u8 one_entry_in_sg = 0; u8 *src, *dst, *assoc; __be32 counter = cpu_to_be32(1); struct crypto_aead *tfm = crypto_aead_reqtfm(req); @@ -908,7 +935,6 @@ static int helper_rfc4106_encrypt(struct aead_request *req) req->src->offset + req->src->length <= PAGE_SIZE && sg_is_last(req->dst) && req->dst->offset + req->dst->length <= PAGE_SIZE) { - one_entry_in_sg = 1; scatterwalk_start(&src_sg_walk, req->src); assoc = scatterwalk_map(&src_sg_walk); src = assoc + req->assoclen; @@ -916,7 +942,23 @@ static int helper_rfc4106_encrypt(struct aead_request *req) if (unlikely(req->src != req->dst)) { scatterwalk_start(&dst_sg_walk, req->dst); dst = scatterwalk_map(&dst_sg_walk) + req->assoclen; + + aesni_do_gcm_enc_tfm(aes_ctx, dst, src, req->cryptlen, iv, + ctx->hash_subkey, assoc, req->assoclen - 8, + dst + req->cryptlen, auth_tag_len); + + scatterwalk_unmap(dst - req->assoclen); + scatterwalk_advance(&dst_sg_walk, req->dst->length); + scatterwalk_done(&dst_sg_walk, 1, 0); + } else { + aesni_do_gcm_enc_tfm(aes_ctx, dst, src, req->cryptlen, iv, + ctx->hash_subkey, assoc, req->assoclen - 8, + dst + req->cryptlen, auth_tag_len); } + + scatterwalk_unmap(assoc); + scatterwalk_advance(&src_sg_walk, req->src->length); + scatterwalk_done(&src_sg_walk, req->src == req->dst, 0); } else { /* Allocate memory for src, dst, assoc */ assoc = kmalloc(req->cryptlen + auth_tag_len + req->assoclen, @@ -925,28 +967,14 @@ static int helper_rfc4106_encrypt(struct aead_request *req) return -ENOMEM; scatterwalk_map_and_copy(assoc, req->src, 0, req->assoclen + req->cryptlen, 0); - src = assoc + req->assoclen; - dst = src; - } + dst = src = assoc + req->assoclen; - kernel_fpu_begin(); - aesni_gcm_enc_tfm(aes_ctx, dst, src, req->cryptlen, iv, - ctx->hash_subkey, assoc, req->assoclen - 8, - dst + req->cryptlen, auth_tag_len); - kernel_fpu_end(); + aesni_gcm_enc_tfm(aes_ctx, dst, src, req->cryptlen, iv, + ctx->hash_subkey, assoc, req->assoclen - 8, + dst + req->cryptlen, auth_tag_len); - /* The authTag (aka the Integrity Check Value) needs to be written - * back to the packet. */ - if (one_entry_in_sg) { - if (unlikely(req->src != req->dst)) { - scatterwalk_unmap(dst - req->assoclen); - scatterwalk_advance(&dst_sg_walk, req->dst->length); - scatterwalk_done(&dst_sg_walk, 1, 0); - } - scatterwalk_unmap(assoc); - scatterwalk_advance(&src_sg_walk, req->src->length); - scatterwalk_done(&src_sg_walk, req->src == req->dst, 0); - } else { + /* The authTag (aka the Integrity Check Value) needs to be written + * back to the packet. */ scatterwalk_map_and_copy(dst, req->dst, req->assoclen, req->cryptlen + auth_tag_len, 1); kfree(assoc); @@ -956,7 +984,6 @@ static int helper_rfc4106_encrypt(struct aead_request *req) static int helper_rfc4106_decrypt(struct aead_request *req) { - u8 one_entry_in_sg = 0; u8 *src, *dst, *assoc; unsigned long tempCipherLen = 0; __be32 counter = cpu_to_be32(1); @@ -990,47 +1017,45 @@ static int helper_rfc4106_decrypt(struct aead_request *req) req->src->offset + req->src->length <= PAGE_SIZE && sg_is_last(req->dst) && req->dst->offset + req->dst->length <= PAGE_SIZE) { - one_entry_in_sg = 1; scatterwalk_start(&src_sg_walk, req->src); assoc = scatterwalk_map(&src_sg_walk); src = assoc + req->assoclen; - dst = src; if (unlikely(req->src != req->dst)) { scatterwalk_start(&dst_sg_walk, req->dst); dst = scatterwalk_map(&dst_sg_walk) + req->assoclen; - } - - } else { - /* Allocate memory for src, dst, assoc */ - assoc = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC); - if (!assoc) - return -ENOMEM; - scatterwalk_map_and_copy(assoc, req->src, 0, - req->assoclen + req->cryptlen, 0); - src = assoc + req->assoclen; - dst = src; - } - kernel_fpu_begin(); - aesni_gcm_dec_tfm(aes_ctx, dst, src, tempCipherLen, iv, - ctx->hash_subkey, assoc, req->assoclen - 8, - authTag, auth_tag_len); - kernel_fpu_end(); - - /* Compare generated tag with passed in tag. */ - retval = crypto_memneq(src + tempCipherLen, authTag, auth_tag_len) ? - -EBADMSG : 0; + retval = aesni_do_gcm_dec_tfm(aes_ctx, dst, src, + tempCipherLen, iv, ctx->hash_subkey, + assoc, req->assoclen - 8, authTag, + auth_tag_len); - if (one_entry_in_sg) { - if (unlikely(req->src != req->dst)) { scatterwalk_unmap(dst - req->assoclen); scatterwalk_advance(&dst_sg_walk, req->dst->length); scatterwalk_done(&dst_sg_walk, 1, 0); + } else { + dst = src; + retval = aesni_do_gcm_dec_tfm(aes_ctx, dst, src, + tempCipherLen, iv, ctx->hash_subkey, + assoc, req->assoclen - 8, authTag, + auth_tag_len); } scatterwalk_unmap(assoc); scatterwalk_advance(&src_sg_walk, req->src->length); scatterwalk_done(&src_sg_walk, req->src == req->dst, 0); } else { + /* Allocate memory for src, dst, assoc */ + assoc = kmalloc(req->cryptlen + req->assoclen, GFP_ATOMIC); + if (!assoc) + return -ENOMEM; + scatterwalk_map_and_copy(assoc, req->src, 0, + req->assoclen + req->cryptlen, 0); + dst = src = assoc + req->assoclen; + + retval = aesni_do_gcm_dec_tfm(aes_ctx, dst, src, tempCipherLen, + iv, ctx->hash_subkey, assoc, + req->assoclen - 8, authTag, + auth_tag_len); + scatterwalk_map_and_copy(dst, req->dst, req->assoclen, tempCipherLen, 1); kfree(assoc); From patchwork Mon Oct 17 22:19:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101663 Delivered-To: patch@linaro.org Received: by 10.140.97.247 with SMTP id m110csp598723qge; Mon, 17 Oct 2016 15:22:39 -0700 (PDT) X-Received: by 10.98.112.195 with SMTP id l186mr40331753pfc.35.1476742959424; Mon, 17 Oct 2016 15:22:39 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r8si8505163pgn.297.2016.10.17.15.22.39; Mon, 17 Oct 2016 15:22:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759536AbcJQWWc (ORCPT + 1 other); Mon, 17 Oct 2016 18:22:32 -0400 Received: from mout.kundenserver.de ([212.227.126.133]:53153 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759561AbcJQWVk (ORCPT ); Mon, 17 Oct 2016 18:21:40 -0400 Received: from wuerfel.lan. ([78.43.20.153]) by mrelayeu.kundenserver.de (mreue001) with ESMTPA (Nemesis) id 0MWKkb-1cSxZT2VbN-00XO5z; Tue, 18 Oct 2016 00:20:10 +0200 From: Arnd Bergmann To: Linus Torvalds , Michal Marek Cc: linux-kernel@vger.kernel.org, Arnd Bergmann , x86@kernel.org, linux-media@vger.kernel.org, Mauro Carvalho Chehab , Martin Schwidefsky , linux-s390@vger.kernel.org, Ilya Dryomov , dri-devel@lists.freedesktop.org, linux-mtd@lists.infradead.org, Herbert Xu , linux-crypto@vger.kernel.org, "David S. Miller" , netdev@vger.kernel.org, Greg Kroah-Hartman , ceph-devel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-ext4@vger.kernel.org, netfilter-devel@vger.kernel.org, Vineet Gupta , Kees Cook , Ingo Molnar , Josh Poimboeuf , Nicolas Pitre , Andrew Morton , Heiko Carstens , Christian Borntraeger , linux-kbuild@vger.kernel.org, linux-snps-arc@lists.infradead.org Subject: [PATCH 28/28] Kbuild: bring back -Wmaybe-uninitialized warning Date: Tue, 18 Oct 2016 00:19:11 +0200 Message-Id: <20161017222000.1934898-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20161017220342.1627073-1-arnd@arndb.de> References: <20161017220342.1627073-1-arnd@arndb.de> X-Provags-ID: V03:K0:GYmvA3K1oLjK7UXoHztapipCCPCCtyzrfNrLHLiT/+0685FFZKF dH3IsCJiqTeEBVMYyi5pJgjFV4tn5wEHImOOmVECHyMqmlIYMnoWLIRdPiK90r6+B3Dsm3v izALp9869fZrgojChoHBb4LPdAOiKVBXPb+DpCBajSX8fd6688vkOJN07Cr3/LWoWG/fnKV v8tONWRW5l2Mb4u1RsDlQ== X-UI-Out-Filterresults: notjunk:1; V01:K0:Ne+WDpZecMk=:itDvou9YqiactyWFSv9jN0 9Rs44cMqaA4P3qDTSZZYKlmXs/edce0KXcM4sC2SxmlassreU35YzV0BWg6t5I4ePyfcMgac9 KmloFsQZQ9c4DQR2K7Uab9lUaCnPgjxRnNHt4K1GZ/tcDu0H4LTp56p8PKJa/HqaiWr4/IXBQ wAkg9KUz0GQPGJXAEuC676LYz8S6m33fLBrOYwFPF02VlRXXvoU8i8yo7lh1lxoOSo5QgFKiJ RPSuHaQ9BSMjuCiTA7DAoXJiTGlsyIoxquYO5laKXlnudd8oMwwrEbfLLbLToafQ85oRP2yhs JSsu8Yp6eI1KEOa6ON2O5H71yFIKUtlFnl+5FU6uT+EMuvYVitY5CYYncdQwTOXbzaKSNB+QV 7psCMxR5qvkyPXQO4aCpMJWnW9BDh7dG0UbyHqrmS7SAigaU0sd7GEaEzyVDi5vSld3YeyLNP y0mwrUzQD3LY0MCUPQuRHfpmGB7ZQKE39Hkwu0gm2GZcxQJUHUpw2Ohz7TUBdOCjmjk+W3ai0 ec1U8DBSBTZFIcDQ2PhiDkfcnLLx/8KSN8CFFiq0Qi2grQCMxL2sBWQ1iL9hDkqROnzbG5AZx Rc2nKWtFxTFCNNrQD3hMMYCRsbrBI5MTZqQ+fDi0nevRfojk+9zXsgwqikADBDhIcSQQHylL6 QQ4b6TOxQnwo8nR53f7w9vY1FET6jMpDQHH9ykezfDABfaoiXp4DNAt7Kh3V+G8j3aCM= Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Traditionally, we have always had warnings about uninitialized variables enabled, as this is part of -Wall, and generally a good idea [1], but it also always produced false positives, mainly because this is a variation of the halting problem and provably impossible to get right in all cases [2]. Various people have identified cases that are particularly bad for false positives, and in commit e74fc973b6e5 ("Turn off -Wmaybe-uninitialized when building with -Os"), I turned off the warning for any build that was done with CC_OPTIMIZE_FOR_SIZE. This drastically reduced the number of false positive warnings in the default build but unfortunately had the side effect of turning the warning off completely in 'allmodconfig' builds, which in turn led to a lot of warnings (both actual bugs, and remaining false positives) to go in unnoticed. With commit 877417e6ffb9 ("Kbuild: change CC_OPTIMIZE_FOR_SIZE definition") enabled the warning again for allmodconfig builds in v4.7 and in v4.8-rc1, I had finally managed to address all warnings I get in an ARM allmodconfig build and most other maybe-uninitialized warnings for ARM randconfig builds. However, commit 6e8d666e9253 ("Disable "maybe-uninitialized" warning globally") was merged at the same time and disabled it completely for all configurations, because of false-positive warnings on x86 that I had not addressed until then. This caused a lot of actual bugs to get merged into mainline, and I sent several dozen patches for these during the v4.9 development cycle. Most of these are actual bugs, some are for correct code that is safe because it is only called under external constraints that make it impossible to run into the case that gcc sees, and in a few cases gcc is just stupid and finds something that can obviously never happen. I have now done a few thousand randconfig builds on x86 and collected all patches that I needed to address every single warning I got (I can provide the combined patch for the other warnings if anyone is interested), so I hope we can get the warning back and let people catch the actual bugs earlier. Note that the majority of the patches I created are for the third kind of problem (stupid false-positives), for one of two reasons: - some of them only get triggered in certain combinations of config options, so we don't always run into them, and - the actual bugs tend to get addressed much quicker as they also lead to incorrect runtime behavior. These 27 patches address the warnings that either occur in one of the more common configurations (defconfig, allmodconfig, or something built by the kbuild robot or kernelci.org), or they are about a real bug. It would be good to get these all into v4.9 if we want to turn on the warning again. I have tested these extensively with gcc-4.9 and gcc-6 and done a bit of testing with gcc-5, and all of these should now be fine. gcc-4.8 is much worse about the false-positive warnings and is also fairly old now, so I'm leaving the warning disabled with that version. gcc-4.7 and older don't understand the -Wno-maybe-uninitialized option and are not affected by this patch either way. I have another (smaller) series of patches for warnings that are both harmless and not as easy to trigger, and I will send them for inclusion in v4.10. Link: https://rusty.ozlabs.org/?p=232 [1] Link: https://gcc.gnu.org/wiki/Better_Uninitialized_Warnings [2] Signed-off-by: Arnd Bergmann --- Makefile | 10 ++++++---- arch/arc/Makefile | 4 +++- scripts/Makefile.ubsan | 4 ++++ 3 files changed, 13 insertions(+), 5 deletions(-) Cc: x86@kernel.org Cc: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab Cc: Martin Schwidefsky Cc: linux-s390@vger.kernel.org Cc: Ilya Dryomov Cc: dri-devel@lists.freedesktop.org Cc: linux-mtd@lists.infradead.org Cc: Herbert Xu Cc: linux-crypto@vger.kernel.org Cc: "David S. Miller" Cc: netdev@vger.kernel.org Cc: Greg Kroah-Hartman Cc: ceph-devel@vger.kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net Cc: linux-ext4@vger.kernel.org Cc: netfilter-devel@vger.kernel.org -- 2.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/Makefile b/Makefile index 512e47a..43cd3d9 100644 --- a/Makefile +++ b/Makefile @@ -370,7 +370,7 @@ LDFLAGS_MODULE = CFLAGS_KERNEL = AFLAGS_KERNEL = LDFLAGS_vmlinux = -CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im +CFLAGS_GCOV = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized CFLAGS_KCOV := $(call cc-option,-fsanitize-coverage=trace-pc,) @@ -620,7 +620,6 @@ ARCH_CFLAGS := include arch/$(SRCARCH)/Makefile KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,) -KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,) KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,) ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION @@ -629,15 +628,18 @@ KBUILD_CFLAGS += $(call cc-option,-fdata-sections,) endif ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE -KBUILD_CFLAGS += -Os +KBUILD_CFLAGS += -Os $(call cc-disable-warning,maybe-uninitialized,) else ifdef CONFIG_PROFILE_ALL_BRANCHES -KBUILD_CFLAGS += -O2 +KBUILD_CFLAGS += -O2 $(call cc-disable-warning,maybe-uninitialized,) else KBUILD_CFLAGS += -O2 endif endif +KBUILD_CFLAGS += $(call cc-ifversion, -lt, 0409, \ + $(call cc-disable-warning,maybe-uninitialized,)) + # Tell gcc to never replace conditional load with a non-conditional one KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) diff --git a/arch/arc/Makefile b/arch/arc/Makefile index aa82d13..19cce22 100644 --- a/arch/arc/Makefile +++ b/arch/arc/Makefile @@ -71,7 +71,9 @@ cflags-$(CONFIG_ARC_DW2_UNWIND) += -fasynchronous-unwind-tables $(cfi) ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE # Generic build system uses -O2, we want -O3 # Note: No need to add to cflags-y as that happens anyways -ARCH_CFLAGS += -O3 +# +# Disable the false maybe-uninitialized warings gcc spits out at -O3 +ARCH_CFLAGS += -O3 $(call cc-disable-warning,maybe-uninitialized,) endif # small data is default for elf32 tool-chain. If not usable, disable it diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan index dd779c4..3b1b138 100644 --- a/scripts/Makefile.ubsan +++ b/scripts/Makefile.ubsan @@ -17,4 +17,8 @@ endif ifdef CONFIG_UBSAN_NULL CFLAGS_UBSAN += $(call cc-option, -fsanitize=null) endif + + # -fsanitize=* options makes GCC less smart than usual and + # increase number of 'maybe-uninitialized false-positives + CFLAGS_UBSAN += $(call cc-option, -Wno-maybe-uninitialized) endif