lkml.org 
[lkml]   [2018]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 241/281] bnx2x: Allow vfs to disable txvlan offload
    Date
    From: "Mintz, Yuval" <Yuval.Mintz@cavium.com>

    [ Upstream commit 92f85f05caa51d844af6ea14ffbc7a786446a644 ]

    VF clients are configured as enforced, meaning firmware is validating
    the correctness of their ethertype/vid during transmission.
    Once txvlan is disabled, VF would start getting SKBs for transmission
    here vlan is on the payload - but it'll pass the packet's ethertype
    instead of the vid, leading to firmware declaring it as malicious.

    Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 19 +++++++++++++++----
    1 file changed, 15 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
    index 596f88b693ef..652099ab0ad6 100644
    --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
    +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
    @@ -3886,15 +3886,26 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
    /* when transmitting in a vf, start bd must hold the ethertype
    * for fw to enforce it
    */
    + u16 vlan_tci = 0;
    #ifndef BNX2X_STOP_ON_ERROR
    - if (IS_VF(bp))
    + if (IS_VF(bp)) {
    #endif
    - tx_start_bd->vlan_or_ethertype =
    - cpu_to_le16(ntohs(eth->h_proto));
    + /* Still need to consider inband vlan for enforced */
    + if (__vlan_get_tag(skb, &vlan_tci)) {
    + tx_start_bd->vlan_or_ethertype =
    + cpu_to_le16(ntohs(eth->h_proto));
    + } else {
    + tx_start_bd->bd_flags.as_bitfield |=
    + (X_ETH_INBAND_VLAN <<
    + ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
    + tx_start_bd->vlan_or_ethertype =
    + cpu_to_le16(vlan_tci);
    + }
    #ifndef BNX2X_STOP_ON_ERROR
    - else
    + } else {
    /* used by FW for packet accounting */
    tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
    + }
    #endif
    }

    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-19 17:05    [W:2.112 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site