From patchwork Sun Dec 15 17:18:06 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hannes Frederic Sowa X-Patchwork-Id: 301365 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 685942C009A for ; Mon, 16 Dec 2013 04:18:31 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751624Ab3LORSK (ORCPT ); Sun, 15 Dec 2013 12:18:10 -0500 Received: from order.stressinduktion.org ([87.106.68.36]:57075 "EHLO order.stressinduktion.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751577Ab3LORSJ (ORCPT ); Sun, 15 Dec 2013 12:18:09 -0500 Received: by order.stressinduktion.org (Postfix, from userid 500) id 721401A0C2AE; Sun, 15 Dec 2013 18:18:07 +0100 (CET) Date: Sun, 15 Dec 2013 18:18:06 +0100 From: Hannes Frederic Sowa To: Jerry Chu Cc: David Miller , Eric Dumazet , Herbert Xu , Or Gerlitz , Ben Hutchings , "netdev@vger.kernel.org" Subject: [PATCH net-next] ipv6: revert misguided compiler warning fix on ipv6_exthdrs_len Message-ID: <20131215171806.GA1715@order.stressinduktion.org> Mail-Followup-To: Jerry Chu , David Miller , Eric Dumazet , Herbert Xu , Or Gerlitz , Ben Hutchings , "netdev@vger.kernel.org" References: <1386824025-27413-1-git-send-email-hkchu@google.com> <20131214062929.GA23563@order.stressinduktion.org> <20131214.020211.969354536190248209.davem@davemloft.net> Mime-Version: 1.0 Content-Disposition: inline In-Reply-To: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This essentlally reverts commit f52d81dc27c3456c702e83183035142c222acdc7 ("ipv6: fix compiler warning in ipv6_exthdrs_len") and silences the warning with uninitialized_var. Cc: Jerry Chu Signed-off-by: Hannes Frederic Sowa --- On Mon, Dec 16, 2013 at 12:20:22AM +0800, Jerry Chu wrote: > On Sat, Dec 14, 2013 at 3:02 PM, David Miller wrote: > > From: Hannes Frederic Sowa > > Date: Sat, 14 Dec 2013 07:29:29 +0100 > > > >> Commit 299603e8370a93dd5d8e8d800f0dff1ce2c53d36 ("net-gro: Prepare GRO > >> stack for the upcoming tunneling support") used an uninitialized variable > >> which leads to the following compiler warning: > >> > >> net/ipv6/ip6_offload.c: In function ‘ipv6_gro_complete’: > >> net/ipv6/ip6_offload.c:178:24: warning: ‘optlen’ may be used uninitialized in this function [-Wmaybe-uninitialized] > >> opth = (void *)opth + optlen; > >> ^ > >> net/ipv6/ip6_offload.c:164:22: note: ‘optlen’ was declared here > >> int len = 0, proto, optlen; > >> ^ > >> Fix it up. > >> > >> Cc: Jerry Chu > >> Signed-off-by: Hannes Frederic Sowa > > > > Applied. > > Please back out the above "fix" - it actually breaks the original code because > the fix will cause exthdrs_len to be one optlen short. > > There was no bug in the original code, just the compiler warning (and I do not > get any warning, although I admit I did not run with the -W flag). Sorry, I see now, of course. Btw. I didn't use any special flags, just a normal kernel build with gcc 4.8.2. > In any case I will submit a revision shortly that will silent any > warning if exists. I hope you are ok with this. Sorry, Hannes net/ipv6/ip6_offload.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c index 08861f1..0a578fc 100644 --- a/net/ipv6/ip6_offload.c +++ b/net/ipv6/ip6_offload.c @@ -161,7 +161,7 @@ static int ipv6_exthdrs_len(struct ipv6hdr *iph, const struct net_offload **opps) { struct ipv6_opt_hdr *opth = NULL; - int len = 0, optlen = 0, proto; + int len = 0, proto, uninitialized_var(optlen); proto = iph->nexthdr; for (;;) { @@ -172,12 +172,11 @@ static int ipv6_exthdrs_len(struct ipv6hdr *iph, if (!((*opps)->flags & INET6_PROTO_GSO_EXTHDR)) break; } - if (opth == NULL) { + if (opth == NULL) opth = (void *)(iph+1); - } else { - optlen = ipv6_optlen(opth); + else opth = (void *)opth + optlen; - } + optlen = ipv6_optlen(opth); len += optlen; proto = opth->nexthdr; }