2019-08-08 16:09:55

by Julia Lawall

[permalink] [raw]
Subject: drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37: ERROR: invalid reference to the index variable of the iterator on line 7056 (fwd)

Hello,

Is it guaranteed that the loop starting on line 7056 will eventually take
the break? If not, line 7089 will be performing an invalid dereference of
ch.

julia

---------- Forwarded message ----------
Date: Thu, 8 Aug 2019 21:31:53 +0800
From: kbuild test robot <[email protected]>
To: [email protected]
Cc: Julia Lawall <[email protected]>
Subject: drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37: ERROR: invalid
reference to the index variable of the iterator on line 7056

CC: [email protected]
CC: [email protected]
TO: Harshitha Ramamurthy <[email protected]>
CC: Jeff Kirsher <[email protected]>

tree: https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux.git master
head: ecb095bff5d4b8711a81968625b3b4a235d3e477
commit: 1d8d80b4e4ff641eefa5250cba324dfa5861a9f1 i40e: Add macvlan support on i40e
date: 6 weeks ago
:::::: branch date: 15 hours ago
:::::: commit date: 6 weeks ago

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <[email protected]>
Reported-by: Julia Lawall <[email protected]>

>> drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37: ERROR: invalid reference to the index variable of the iterator on line 7056

git remote add linus https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux.git
git remote update linus
git checkout 1d8d80b4e4ff641eefa5250cba324dfa5861a9f1
vim +7089 drivers/net/ethernet/intel/i40e/i40e_main.c

1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7037
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7038 /**
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7039 * i40e_fwd_ring_up - bring the macvlan device up
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7040 * @vsi: the VSI we want to access
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7041 * @vdev: macvlan netdevice
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7042 * @fwd: the private fwd structure
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7043 */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7044 static int i40e_fwd_ring_up(struct i40e_vsi *vsi, struct net_device *vdev,
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7045 struct i40e_fwd_adapter *fwd)
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7046 {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7047 int ret = 0, num_tc = 1, i, aq_err;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7048 struct i40e_channel *ch, *ch_tmp;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7049 struct i40e_pf *pf = vsi->back;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7050 struct i40e_hw *hw = &pf->hw;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7051
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7052 if (list_empty(&vsi->macvlan_list))
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7053 return -EINVAL;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7054
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7055 /* Go through the list and find an available channel */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 @7056 list_for_each_entry_safe(ch, ch_tmp, &vsi->macvlan_list, list) {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7057 if (!i40e_is_channel_macvlan(ch)) {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7058 ch->fwd = fwd;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7059 /* record configuration for macvlan interface in vdev */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7060 for (i = 0; i < num_tc; i++)
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7061 netdev_bind_sb_channel_queue(vsi->netdev, vdev,
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7062 i,
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7063 ch->num_queue_pairs,
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7064 ch->base_queue);
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7065 for (i = 0; i < ch->num_queue_pairs; i++) {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7066 struct i40e_ring *tx_ring, *rx_ring;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7067 u16 pf_q;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7068
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7069 pf_q = ch->base_queue + i;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7070
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7071 /* Get to TX ring ptr */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7072 tx_ring = vsi->tx_rings[pf_q];
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7073 tx_ring->ch = ch;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7074
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7075 /* Get the RX ring ptr */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7076 rx_ring = vsi->rx_rings[pf_q];
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7077 rx_ring->ch = ch;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7078 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7079 break;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7080 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7081 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7082
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7083 /* Guarantee all rings are updated before we update the
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7084 * MAC address filter.
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7085 */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7086 wmb();
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7087
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7088 /* Add a mac filter */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 @7089 ret = i40e_add_macvlan_filter(hw, ch->seid, vdev->dev_addr, &aq_err);
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7090 if (ret) {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7091 /* if we cannot add the MAC rule then disable the offload */
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7092 macvlan_release_l2fw_offload(vdev);
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7093 for (i = 0; i < ch->num_queue_pairs; i++) {
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7094 struct i40e_ring *rx_ring;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7095 u16 pf_q;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7096
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7097 pf_q = ch->base_queue + i;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7098 rx_ring = vsi->rx_rings[pf_q];
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7099 rx_ring->netdev = NULL;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7100 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7101 dev_info(&pf->pdev->dev,
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7102 "Error adding mac filter on macvlan err %s, aq_err %s\n",
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7103 i40e_stat_str(hw, ret),
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7104 i40e_aq_str(hw, aq_err));
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7105 netdev_err(vdev, "L2fwd offload disabled to L2 filter error\n");
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7106 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7107
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7108 return ret;
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7109 }
1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7110

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation


2019-08-08 21:57:14

by Jeff Kirsher

[permalink] [raw]
Subject: Re: drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37: ERROR: invalid reference to the index variable of the iterator on line 7056 (fwd)

On Thu, 2019-08-08 at 18:08 +0200, Julia Lawall wrote:
> Hello,
>
> Is it guaranteed that the loop starting on line 7056 will eventually
> take
> the break? If not, line 7089 will be performing an invalid
> dereference of
> ch.

Good catch Julia, I have talked with Harshitha and if after checking
the list of channels and not finding an available channel, we should
exit the function instead of proceeding on to add the MACVLAN filter.

Harshitha said she would put together a patch to fix the issue in the
next day or two, unless you or someone else gets to it first.

>
> ---------- Forwarded message ----------
> Date: Thu, 8 Aug 2019 21:31:53 +0800
> From: kbuild test robot <[email protected]>
> To: [email protected]
> Cc: Julia Lawall <[email protected]>
> Subject: drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37:
> ERROR: invalid
> reference to the index variable of the iterator on line 7056
>
> CC: [email protected]
> CC: [email protected]
> TO: Harshitha Ramamurthy <[email protected]>
> CC: Jeff Kirsher <[email protected]>
>
> tree:
> https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux.git
> master
> head: ecb095bff5d4b8711a81968625b3b4a235d3e477
> commit: 1d8d80b4e4ff641eefa5250cba324dfa5861a9f1 i40e: Add macvlan
> support on i40e
> date: 6 weeks ago
> :::::: branch date: 15 hours ago
> :::::: commit date: 6 weeks ago
>
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <[email protected]>
> Reported-by: Julia Lawall <[email protected]>
>
> > > drivers/net/ethernet/intel/i40e/i40e_main.c:7089:35-37: ERROR:
> > > invalid reference to the index variable of the iterator on line
> > > 7056
>
> git remote add linus
> https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux.git
> git remote update linus
> git checkout 1d8d80b4e4ff641eefa5250cba324dfa5861a9f1
> vim +7089 drivers/net/ethernet/intel/i40e/i40e_main.c
>
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7037
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7038 /**
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7039 *
> i40e_fwd_ring_up - bring the macvlan device up
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7040 * @vsi: the
> VSI we want to access
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7041 * @vdev:
> macvlan netdevice
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7042 * @fwd: the
> private fwd structure
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7043 */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7044 static int
> i40e_fwd_ring_up(struct i40e_vsi *vsi, struct net_device *vdev,
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7045
> struct i40e_fwd_adapter *fwd)
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7046 {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7047 int ret
> = 0, num_tc = 1, i, aq_err;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7048 struct
> i40e_channel *ch, *ch_tmp;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7049 struct
> i40e_pf *pf = vsi->back;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7050 struct
> i40e_hw *hw = &pf->hw;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7051
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7052 if
> (list_empty(&vsi->macvlan_list))
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7053
> return -EINVAL;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7054
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7055 /* Go
> through the list and find an available channel */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 @7056 list_fo
> r_each_entry_safe(ch, ch_tmp, &vsi->macvlan_list, list) {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7057
> if (!i40e_is_channel_macvlan(ch)) {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7058
> ch->fwd = fwd;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7059
> /* record configuration for macvlan interface in vdev */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7060
> for (i = 0; i < num_tc; i++)
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7061
> netdev_bind_sb_channel_queue(vsi->netdev, vdev,
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7062
> i,
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7063
> ch->num_queue_pairs,
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7064
> ch->base_queue);
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7065
> for (i = 0; i < ch->num_queue_pairs; i++) {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7066
> struct i40e_ring *tx_ring, *rx_ring;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7067
> u16 pf_q;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7068
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7069
> pf_q = ch->base_queue + i;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7070
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7071
> /* Get to TX ring ptr */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7072
> tx_ring = vsi->tx_rings[pf_q];
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7073
> tx_ring->ch = ch;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7074
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7075
> /* Get the RX ring ptr */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7076
> rx_ring = vsi->rx_rings[pf_q];
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7077
> rx_ring->ch = ch;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7078
> }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7079
> break;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7080
> }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7081 }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7082
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7083 /*
> Guarantee all rings are updated before we update the
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7084 * MAC
> address filter.
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7085 */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7086 wmb();
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7087
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7088 /* Add
> a mac filter */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 @7089 ret =
> i40e_add_macvlan_filter(hw, ch->seid, vdev->dev_addr, &aq_err);
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7090 if
> (ret) {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7091
> /* if we cannot add the MAC rule then disable the offload */
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7092
> macvlan_release_l2fw_offload(vdev);
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7093
> for (i = 0; i < ch->num_queue_pairs; i++) {
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7094
> struct i40e_ring *rx_ring;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7095
> u16 pf_q;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7096
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7097
> pf_q = ch->base_queue + i;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7098
> rx_ring = vsi->rx_rings[pf_q];
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7099
> rx_ring->netdev = NULL;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7100
> }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7101
> dev_info(&pf->pdev->dev,
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7102
> "Error adding mac filter on macvlan err %s, aq_err %s\n",
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7103
> i40e_stat_str(hw, ret),
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7104
> i40e_aq_str(hw, aq_err));
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7105
> netdev_err(vdev, "L2fwd offload disabled to L2 filter error\n");
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7106 }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7107
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7108 return
> ret;
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7109 }
> 1d8d80b4e4ff64 Harshitha Ramamurthy 2019-06-19 7110
>
> ---
> 0-DAY kernel test infrastructure Open Source
> Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel
> Corporation


Attachments:
signature.asc (849.00 B)
This is a digitally signed message part