From patchwork Tue Jun 23 13:45:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Ferruh Yigit X-Patchwork-Id: 72039 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 21837A0350; Tue, 23 Jun 2020 15:45:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0534C1D669; Tue, 23 Jun 2020 15:45:47 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 0B1A11D65E; Tue, 23 Jun 2020 15:45:44 +0200 (CEST) IronPort-SDR: KE9XZRO/jpmj3sj9sNP1rpFtYqB31QssVmwT5lXIn12TIoceFwaW5DgU6Tm89tjpsI+vKai43Z Y45wjTJhWlCg== X-IronPort-AV: E=McAfee;i="6000,8403,9660"; a="162151577" X-IronPort-AV: E=Sophos;i="5.75,271,1589266800"; d="scan'208";a="162151577" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2020 06:45:35 -0700 IronPort-SDR: z2LffeCHCBH9/9x4VBTqnuo6/pqhj49u3drVFSdlZMSP8JevXgXvrvrSI6L1EWq6y5JCwSpCrc BfzPtnbdEbGg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,271,1589266800"; d="scan'208";a="263339521" Received: from silpixa00399752.ir.intel.com (HELO silpixa00399752.ger.corp.intel.com) ([10.237.222.180]) by fmsmga007.fm.intel.com with ESMTP; 23 Jun 2020 06:45:34 -0700 From: Ferruh Yigit To: Jingjing Wu , Beilei Xing Cc: dev@dpdk.org, Ferruh Yigit , stable@dpdk.org Date: Tue, 23 Jun 2020 14:45:31 +0100 Message-Id: <20200623134532.1271737-1-ferruh.yigit@intel.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH] net/iavf: fix uninitialized variable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This is observed with experimental gcc 11, although the older gcc versions don't complain about it, issue seems a valid one. gcc version 11.0.0 20200621 (experimental) (GCC) Build error .../drivers/net/iavf/iavf_ethdev.c: In function ‘iavf_dev_link_update’: .../drivers/net/iavf/iavf_ethdev.c:641:6: error: ‘new_link’ is used uninitialized [-Werror=uninitialized] 641 | if (rte_atomic64_cmpset((uint64_t *)&dev->data->dev_link, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 642 | *(uint64_t *)&dev->data->dev_link, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 643 | *(uint64_t *)&new_link) == 0) | ~~~~~~~~~~~~~~~~~~~~~~~ .../drivers/net/iavf/iavf_ethdev.c:596:22: note: ‘new_link’ declared here 596 | struct rte_eth_link new_link; | ^~~~~~~~ cc1: all warnings being treated as error All fields of the 'new_link' struct is already set in function, so the 'uninitialized' warning is hard to get. This is because the combination of aligning and bitfield usage of the struct The definition of the struct is: struct rte_eth_link { uint32_t link_speed; /**< ETH_SPEED_NUM_ */ uint16_t link_duplex : 1; /**< ETH_LINK_[HALF/FULL]_DUPLEX */ uint16_t link_autoneg : 1; /**< ETH_LINK_[AUTONEG/FIXED] */ uint16_t link_status : 1; /**< ETH_LINK_[DOWN/UP] */ } __rte_aligned(8); /**< aligned for atomic64 read/write */ Overall the size of the 'struct rte_eth_link' is 64 bits, but function only sets the 35 bits of it, because only 3 bits of 16 bits variable are used. When the struct cast to 'uint64_t' because of the 'rte_atomic64_cmpset' the upper 29 bits are used without initialization. To fix the uninitialized usage, memset the variable 'new_link' before using it. Cc: stable@dpdk.org Signed-off-by: Ferruh Yigit Acked-by: Qi Zhang --- Reference: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95818 --- drivers/net/iavf/iavf_ethdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index 2b1066b0a..45c853f19 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -596,6 +596,8 @@ iavf_dev_link_update(struct rte_eth_dev *dev, struct rte_eth_link new_link; struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); + memset(&new_link, 0, sizeof(new_link)); + /* Only read status info stored in VF, and the info is updated * when receive LINK_CHANGE evnet from PF by Virtchnnl. */