All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Wang, Haiyue" <haiyue.wang@intel.com>
To: "Yigit, Ferruh" <ferruh.yigit@intel.com>,
	"Yang, Qiming" <qiming.yang@intel.com>,
	"Zhang, Qi Z" <qi.z.zhang@intel.com>,
	"Stillwell Jr,  Paul M" <paul.m.stillwell.jr@intel.com>,
	"Lu, Wenzhuo" <wenzhuo.lu@intel.com>,
	"Rong, Leyi" <leyi.rong@intel.com>,
	"Shukla, Shivanshu" <shivanshu.shukla@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"stable@dpdk.org" <stable@dpdk.org>,
	"Kevin Traynor" <ktraynor@redhat.com>,
	Ajit Khaparde <ajit.khaparde@broadcom.com>
Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
Date: Tue, 11 May 2021 01:59:12 +0000	[thread overview]
Message-ID: <BN8PR11MB3795D792FA9A3E14FACFC6FFF7539@BN8PR11MB3795.namprd11.prod.outlook.com> (raw)
In-Reply-To: <d8638559-b3cb-9011-86a2-39dec3e32843@intel.com>

> -----Original Message-----
> From: Yigit, Ferruh <ferruh.yigit@intel.com>
> Sent: Tuesday, May 11, 2021 01:28
> To: Wang, Haiyue <haiyue.wang@intel.com>; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
> <qi.z.zhang@intel.com>; Stillwell Jr, Paul M <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo
> <wenzhuo.lu@intel.com>; Rong, Leyi <leyi.rong@intel.com>; Shukla, Shivanshu
> <shivanshu.shukla@intel.com>
> Cc: dev@dpdk.org; stable@dpdk.org; Kevin Traynor <ktraynor@redhat.com>; Ajit Khaparde
> <ajit.khaparde@broadcom.com>
> Subject: Re: [dpdk-dev] [PATCH 3/4] net/ice/base: fix build with gcc11
> 
> On 5/10/2021 6:04 PM, Wang, Haiyue wrote:
> >> -----Original Message-----
> >> From: dev <dev-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> >> Sent: Monday, May 10, 2021 23:03
> >> To: Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z <qi.z.zhang@intel.com>; Stillwell Jr, Paul M
> >> <paul.m.stillwell.jr@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Rong, Leyi
> <leyi.rong@intel.com>;
> >> Shukla, Shivanshu <shivanshu.shukla@intel.com>
> >> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org; Kevin Traynor
> >> <ktraynor@redhat.com>; Ajit Khaparde <ajit.khaparde@broadcom.com>
> >> 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 <ferruh.yigit@intel.com>
> >> ---
> >> Cc: paul.m.stillwell.jr@intel.com
> >> Cc: qi.z.zhang@intel.com
> >> Cc: leyi.rong@intel.com
> >> Cc: Kevin Traynor <ktraynor@redhat.com>
> >> Cc: Ajit Khaparde <ajit.khaparde@broadcom.com>
> >> ---
> >>  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.
> 

That's why they are static function, not API. These functions are designed for
internally using to handle the compact memory layout with different types.

These XXX_SIZE is a helper to get the different memory type size. Of course,
this should be very careful, in other words, as you said: follows a contract. ;-)


#define DUMMY_ETH_HDR_LEN		16
#define ICE_SW_RULE_RX_TX_ETH_HDR_SIZE \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr) + \
	 (DUMMY_ETH_HDR_LEN * \
	  sizeof(((struct ice_sw_rule_lkup_rx_tx *)0)->hdr[0])))
#define ICE_SW_RULE_RX_TX_NO_HDR_SIZE \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lkup_tx_rx.hdr))
#define ICE_SW_RULE_LG_ACT_SIZE(n) \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.lg_act.act) + \
	 ((n) * sizeof(((struct ice_sw_rule_lg_act *)0)->act[0])))
#define ICE_SW_RULE_VSI_LIST_SIZE(n) \
	(offsetof(struct ice_aqc_sw_rules_elem, pdata.vsi_list.vsi) + \
	 ((n) * sizeof(((struct ice_sw_rule_vsi_list *)0)->vsi[0])))



> 
> 


  reply	other threads:[~2021-05-11  1:59 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-10 15:03 [dpdk-dev] [PATCH 1/4] net/bnx2x: fix build with gcc11 Ferruh Yigit
2021-05-10 15:03 ` [dpdk-dev] [PATCH 2/4] " Ferruh Yigit
2021-05-10 15:03 ` [dpdk-dev] [PATCH 3/4] net/ice/base: " Ferruh Yigit
2021-05-10 17:04   ` Wang, Haiyue
2021-05-10 17:13     ` Wang, Haiyue
2021-05-10 17:31       ` Ferruh Yigit
2021-05-10 17:55         ` Stillwell Jr, Paul M
2021-05-10 17:28     ` Ferruh Yigit
2021-05-11  1:59       ` Wang, Haiyue [this message]
2021-05-11  9:33         ` Ferruh Yigit
2021-05-11  9:08       ` Kevin Traynor
2021-05-10 15:03 ` [dpdk-dev] [PATCH 4/4] net/tap: " Ferruh Yigit
2021-05-11 12:28   ` Kevin Traynor
2021-05-11 11:44 ` [dpdk-dev] [PATCH v2 1/4] net/bnx2x: " Ferruh Yigit
2021-05-11 11:44   ` [dpdk-dev] [PATCH v2 2/4] " Ferruh Yigit
2021-05-11 12:27     ` Kevin Traynor
2021-05-11 11:44   ` [dpdk-dev] [PATCH v2 3/4] net/ice/base: " Ferruh Yigit
2021-05-11 11:44   ` [dpdk-dev] [PATCH v2 4/4] net/tap: " Ferruh Yigit
2021-05-11 12:26   ` [dpdk-dev] [PATCH v2 1/4] net/bnx2x: " Kevin Traynor
2021-05-11 13:14 ` [dpdk-dev] [PATCH v3 " Ferruh Yigit
2021-05-11 13:14   ` [dpdk-dev] [PATCH v3 2/4] " Ferruh Yigit
2021-05-11 13:14   ` [dpdk-dev] [PATCH v3 3/4] net/ice/base: " Ferruh Yigit
2021-05-12  7:43     ` [dpdk-dev] [dpdk-stable] " Wang, Haiyue
2021-05-11 13:14   ` [dpdk-dev] [PATCH v3 4/4] net/tap: " Ferruh Yigit
2021-05-12 13:04   ` [dpdk-dev] [PATCH v3 1/4] net/bnx2x: " Ferruh Yigit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BN8PR11MB3795D792FA9A3E14FACFC6FFF7539@BN8PR11MB3795.namprd11.prod.outlook.com \
    --to=haiyue.wang@intel.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=ktraynor@redhat.com \
    --cc=leyi.rong@intel.com \
    --cc=paul.m.stillwell.jr@intel.com \
    --cc=qi.z.zhang@intel.com \
    --cc=qiming.yang@intel.com \
    --cc=shivanshu.shukla@intel.com \
    --cc=stable@dpdk.org \
    --cc=wenzhuo.lu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.