From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9A363A0C43; Mon, 10 May 2021 19:28:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3048440140; Mon, 10 May 2021 19:28:31 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 9890C4003E; Mon, 10 May 2021 19:28:29 +0200 (CEST) IronPort-SDR: NBnhEjEPGpX77zDw5jo9fRDaJqN5cK3gAAxtL8RCx4vucZpmgxJ24oVwxHlLs35s5hLJSqO+Em hEs4ArrdKNWA== X-IronPort-AV: E=McAfee;i="6200,9189,9980"; a="260510501" X-IronPort-AV: E=Sophos;i="5.82,286,1613462400"; d="scan'208";a="260510501" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2021 10:28:28 -0700 IronPort-SDR: VkvSFBYeb3JC/tevtGx9OiL3sBSVS+RaGebepdLICgKahKgMNYchNx3is3lHO5G5LPn2Ib6XTM t0gYPrSLVYCg== X-IronPort-AV: E=Sophos;i="5.82,287,1613462400"; d="scan'208";a="470859161" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.208.203]) ([10.213.208.203]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2021 10:28:10 -0700 To: "Wang, Haiyue" , "Yang, Qiming" , "Zhang, Qi Z" , "Stillwell Jr, Paul M" , "Lu, Wenzhuo" , "Rong, Leyi" , "Shukla, Shivanshu" Cc: "dev@dpdk.org" , "stable@dpdk.org" , Kevin Traynor , Ajit Khaparde References: <20210510150319.1496105-1-ferruh.yigit@intel.com> <20210510150319.1496105-3-ferruh.yigit@intel.com> From: Ferruh Yigit X-User: ferruhy Message-ID: Date: Mon, 10 May 2021 18:28:05 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" On 5/10/2021 6:04 PM, Wang, Haiyue wrote: >> -----Original Message----- >> From: dev On Behalf Of Ferruh Yigit >> Sent: Monday, May 10, 2021 23:03 >> To: Yang, Qiming ; Zhang, Qi Z ; Stillwell Jr, Paul M >> ; Lu, Wenzhuo ; Rong, Leyi ; >> Shukla, Shivanshu >> Cc: Yigit, Ferruh ; dev@dpdk.org; stable@dpdk.org; Kevin Traynor >> ; Ajit Khaparde >> Subject: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11 >> >> Reproduced with '--buildtype=debugoptimized' config, >> compiler version: gcc (GCC) 12.0.0 20210509 (experimental) >> >> There are multiple build errors, like: >> ../drivers/net/ice/base/ice_switch.c: In function ‘ice_add_marker_act’: >> ../drivers/net/ice/base/ice_switch.c:3727:15: >> warning: array subscript ‘struct ice_aqc_sw_rules_elem[0]’ >> is partly outside array bounds of ‘unsigned char[52]’ >> [-Warray-bounds] >> 3727 | lg_act->type = CPU_TO_LE16(ICE_AQC_SW_RULES_T_LG_ACT); >> | ^~ >> In file included from ../drivers/net/ice/base/ice_type.h:52, >> from ../drivers/net/ice/base/ice_common.h:8, >> from ../drivers/net/ice/base/ice_switch.h:8, >> from ../drivers/net/ice/base/ice_switch.c:5: >> ../drivers/net/ice/base/ice_osdep.h:209:29: >> note: referencing an object of size 52 allocated by ‘rte_zmalloc’ >> 209 | #define ice_malloc(h, s) rte_zmalloc(NULL, s, 0) >> | ^~~~~~~~~~~~~~~~~~~~~~~ >> ../drivers/net/ice/base/ice_switch.c:3720:50: >> note: in expansion of macro ‘ice_malloc’ >> lg_act = (struct ice_aqc_sw_rules_elem *)ice_malloc(hw, rules_size); >> >> These errors are mainly because allocated memory is cast to >> "struct ice_aqc_sw_rules_elem *" but allocated size is less than the size >> of "struct ice_aqc_sw_rules_elem". >> >> "struct ice_aqc_sw_rules_elem" has multiple other structs has unions, >> based on which one is used allocated memory being less than the size of >> "struct ice_aqc_sw_rules_elem" is logically correct but compiler is >> complaining about it. >> >> As a solution making sure allocated memory size is at least size of >> "struct ice_aqc_sw_rules_elem". >> The function to use the struct is 'ice_aq_sw_rules()', and it already has >> parameter for size of the rule, allocating more than needed shouldn't >> cause any problem. >> >> Fixes: c7dd15931183 ("net/ice/base: add virtual switch code") >> Fixes: 02acdce2f553 ("net/ice/base: add MAC filter with marker and counter") >> Fixes: f89aa3affa9e ("net/ice/base: support removing advanced rule") >> Cc: stable@dpdk.org >> >> Signed-off-by: Ferruh Yigit >> --- >> Cc: paul.m.stillwell.jr@intel.com >> Cc: qi.z.zhang@intel.com >> Cc: leyi.rong@intel.com >> Cc: Kevin Traynor >> Cc: Ajit Khaparde >> --- >> drivers/net/ice/base/ice_switch.c | 30 +++++++++++++++++++++++------- >> 1 file changed, 23 insertions(+), 7 deletions(-) > > GCC bug ? > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266 > > Bug 98266 - [11 Regression] bogus array subscript is partly outside array bounds on virtual inheritance > I am not sure if this is a gcc defect. Here there is a memory allocated and assigned to "struct ice_aqc_sw_rules_elem *", but allocated memory size is less than the struct size. As far as I understand this is the reason of compiler warning. For this case it may not be problem logically since both who allocates memory and who uses the memory follows a contract, but there is a mismatch between pointer type and object. If some other function wants to access all fields of the struct, it will be out of bound access.