From patchwork Fri Dec 9 11:36:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101427 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp257693qgi; Fri, 9 Dec 2016 03:37:20 -0800 (PST) X-Received: by 10.98.0.143 with SMTP id 137mr83782342pfa.183.1481283440134; Fri, 09 Dec 2016 03:37:20 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s8si33460453pfd.186.2016.12.09.03.37.19; Fri, 09 Dec 2016 03:37:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-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-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753803AbcLILhR (ORCPT + 25 others); Fri, 9 Dec 2016 06:37:17 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:49954 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753306AbcLILhP (ORCPT ); Fri, 9 Dec 2016 06:37:15 -0500 Received: from wuerfel.lan ([78.43.21.235]) by mrelayeu.kundenserver.de (mreue004 [212.227.15.129]) with ESMTPA (Nemesis) id 0Lg4q7-1cz7Z025mN-00pbgf; Fri, 09 Dec 2016 12:36:53 +0100 From: Arnd Bergmann To: Mauro Carvalho Chehab Cc: Arnd Bergmann , Hans Verkuil , "David S. Miller" , Jarod Wilson , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] [v3] [media] dvb: avoid warning in dvb_net Date: Fri, 9 Dec 2016 12:36:29 +0100 Message-Id: <20161209113648.3529485-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:tWjsPFXD8ngx92MKSfbdoK2G1Ac3VPYAzNoWbLnkNjBbwaANKn0 eY90fLlBEL+8iQ50jGAJcPBAk5wovSS+kTHHgDUnUTCjK3mxXLR7L/1VF6vXUBn1ir7FKwb 8NTYKsvqI+ec41kZVuSOtoV1q617ASlvxQqzjHjw56d73i9VbA13Vu8/vS4tO2ZYQc9QU88 +RmOUsa/XMnR6v9oFvurw== X-UI-Out-Filterresults: notjunk:1; V01:K0:fxiF73d1a/I=:k9knFINUpwnp6iq+99YG5I AZKlag0a1CMHg1E6gY9CoU2SwunKX8/AGu9b747kobsZD17j3IDZ0HgdjTQyXdly1xVE+5EVf q9D15xMvaCTJ5LCiMLwK6p1dCNzRh1ozpgJwCGSDtfDLF206os/+BglHBOP9U7+10Rwer4/qE 7N1xsboUzLBAu0KStncbsqDvAxWvYfcyrmsA+8o2szdR1DK2/L6bdM9qhAZ0NVKFqAaKLyPfe 3GNTzBI4P9YwTxW7OYpDZeh72gLR/ELuWQdAZ6149m7Ms5rrMHDtNt/OqA/bRvPlMLhBT/kuT X6xXUxEg3PYAVTbkYSFq8OSCO+25UWzQr/qjsmLBT0gJza3wxvZtTj32xh/8mWIYZgJKjF5Sp TYds9eQa5P8poHGpYFG/8x49PDHmVeK5HBZoGD18ri0spaT5g8gBdM6zO6YFbj8pNQ77LtfEM K1toij4OpL1Yz+nM2ciUxB89QbC+GXczDeacY27rzUjDLNDrW1HAQZk/zHwCliMOtbm2u+fS1 tNvDI4SScggMXhcwyK1C5wtypf4msteJFwXPoQuVGXnMSQ7BoI3l87tSEJn/oiUT3u0KUKx0N fHBuDMQFwhr8nsqdgrZ57kd9CImQp367kQzkMrA+g1faBklfL7oW9As7xDfy0SGqrmaARs72j 4AqjsM7LrVzuOt1OrcJP6+imrrOd1MH0CVpe3DbfrLDkCIVEfo6mTBSk2/Hh+3fOwXVM= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With gcc-5 or higher on x86, we can get a bogus warning in the dvb-net code: drivers/media/dvb-core/dvb_net.c: In function 'dvb_net_ule': arch/x86/include/asm/string_32.h:78:22: error: '*((void *)&dest_addr+4)' may be used uninitialized in this function [-Werror=maybe-uninitialized] The problem here is that gcc doesn't track all of the conditions to prove it can't end up copying uninitialized data. This changes the logic around so we zero out the destination address earlier when we determine that it is not set here. This allows the compiler to figure it out. Signed-off-by: Arnd Bergmann --- When I got the same warning earlier, Mauro created commit 8b0041db80dd ("[media] dvb-net: split the logic at dvb_net_ule() into other functions") to clean up the code, and that addressed all the warnings I saw earlier, but I now got a different randconfig build that needs either this patch or Mauro's variant "dvb_net: simplify the logic that fills the ethernet address" that does the same change slightly differently. --- drivers/media/dvb-core/dvb_net.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) -- 2.9.0 diff --git a/drivers/media/dvb-core/dvb_net.c b/drivers/media/dvb-core/dvb_net.c index dfc03a95df71..f06e0488aa2c 100644 --- a/drivers/media/dvb-core/dvb_net.c +++ b/drivers/media/dvb-core/dvb_net.c @@ -719,6 +719,9 @@ static void dvb_net_ule_check_crc(struct dvb_net_ule_handle *h, skb_copy_from_linear_data(h->priv->ule_skb, dest_addr, ETH_ALEN); skb_pull(h->priv->ule_skb, ETH_ALEN); + } else { + /* dest_addr buffer is only valid if h->priv->ule_dbit == 0 */ + eth_zero_addr(dest_addr); } /* Handle ULE Extension Headers. */ @@ -750,16 +753,8 @@ static void dvb_net_ule_check_crc(struct dvb_net_ule_handle *h, if (!h->priv->ule_bridged) { skb_push(h->priv->ule_skb, ETH_HLEN); h->ethh = (struct ethhdr *)h->priv->ule_skb->data; - if (!h->priv->ule_dbit) { - /* - * dest_addr buffer is only valid if - * h->priv->ule_dbit == 0 - */ - memcpy(h->ethh->h_dest, dest_addr, ETH_ALEN); - eth_zero_addr(h->ethh->h_source); - } else /* zeroize source and dest */ - memset(h->ethh, 0, ETH_ALEN * 2); - + memcpy(h->ethh->h_dest, dest_addr, ETH_ALEN); + eth_zero_addr(h->ethh->h_source); h->ethh->h_proto = htons(h->priv->ule_sndu_type); } /* else: skb is in correct state; nothing to do. */