Patch "ice: set correct dst VSI in only LAN filters" has been added to the 6.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ice: set correct dst VSI in only LAN filters

to the 6.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ice-set-correct-dst-vsi-in-only-lan-filters.patch
and it can be found in the queue-6.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit fd00e7fb955d2a5ce1f8010575b00b2f15a72772
Author: Michal Swiatkowski <michal.swiatkowski@xxxxxxxxxxxxxxx>
Date:   Mon Aug 19 12:14:01 2024 +0200

    ice: set correct dst VSI in only LAN filters
    
    [ Upstream commit 839e3f9bee425c90a0423d14b102a42fe6635c73 ]
    
    The filters set that will reproduce the problem:
    $ tc filter add dev $VF0_PR ingress protocol arp prio 0 flower \
            skip_sw dst_mac ff:ff:ff:ff:ff:ff action mirred egress \
            redirect dev $PF0
    $ tc filter add dev $VF0_PR ingress protocol arp prio 0 flower \
            skip_sw dst_mac ff:ff:ff:ff:ff:ff src_mac 52:54:00:00:00:10 \
            action mirred egress mirror dev $VF1_PR
    
    Expected behaviour is to set all broadcast from VF0 to the LAN. If the
    src_mac match the value from filters, send packet to LAN and to VF1.
    
    In this case both LAN_EN and LB_EN flags in switch is set in case of
    packet matching both filters. As dst VSI for the only LAN enable bit is
    PF VSI, the packet is being seen on PF. To fix this change dst VSI to
    the source VSI. It will block receiving any packet even when LB_EN is
    set by switch, because local loopback is clear on VF VSI during normal
    operation.
    
    Side note: if the second filters action is redirect instead of mirror
    LAN_EN is clear, because switch is AND-ing LAN_EN from each matched
    filters and OR-ing LB_EN.
    
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@xxxxxxxxx>
    Fixes: 73b483b79029 ("ice: Manage act flags for switchdev offloads")
    Signed-off-by: Michal Swiatkowski <michal.swiatkowski@xxxxxxxxxxxxxxx>
    Reviewed-by: Jacob Keller <jacob.e.keller@xxxxxxxxx>
    Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@xxxxxxxxx>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/ice/ice_tc_lib.c b/drivers/net/ethernet/intel/ice/ice_tc_lib.c
index e6923f8121a99..ea39b999a0d00 100644
--- a/drivers/net/ethernet/intel/ice/ice_tc_lib.c
+++ b/drivers/net/ethernet/intel/ice/ice_tc_lib.c
@@ -819,6 +819,17 @@ ice_eswitch_add_tc_fltr(struct ice_vsi *vsi, struct ice_tc_flower_fltr *fltr)
 		rule_info.sw_act.flag |= ICE_FLTR_TX;
 		rule_info.sw_act.src = vsi->idx;
 		rule_info.flags_info.act = ICE_SINGLE_ACT_LAN_ENABLE;
+		/* This is a specific case. The destination VSI index is
+		 * overwritten by the source VSI index. This type of filter
+		 * should allow the packet to go to the LAN, not to the
+		 * VSI passed here. It should set LAN_EN bit only. However,
+		 * the VSI must be a valid one. Setting source VSI index
+		 * here is safe. Even if the result from switch is set LAN_EN
+		 * and LB_EN (which normally will pass the packet to this VSI)
+		 * packet won't be seen on the VSI, because local loopback is
+		 * turned off.
+		 */
+		rule_info.sw_act.vsi_handle = vsi->idx;
 	} else {
 		/* VF to VF */
 		rule_info.sw_act.flag |= ICE_FLTR_TX;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux