Patch "net: dsa: tag_sja1105: fix source port decoding in vlan_filtering=0 bridge mode" has been added to the 6.1-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

    net: dsa: tag_sja1105: fix source port decoding in vlan_filtering=0 bridge mode

to the 6.1-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:
     net-dsa-tag_sja1105-fix-source-port-decoding-in-vlan.patch
and it can be found in the queue-6.1 subdirectory.

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



commit 772350116f40ff69008c98f1916f4264775a4251
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Sat Jul 1 01:20:10 2023 +0300

    net: dsa: tag_sja1105: fix source port decoding in vlan_filtering=0 bridge mode
    
    [ Upstream commit a398b9ea0c3b791b7a0f4c6029a62cf628f97f22 ]
    
    There was a regression introduced by the blamed commit, where pinging to
    a VLAN-unaware bridge would fail with the repeated message "Couldn't
    decode source port" coming from the tagging protocol driver.
    
    When receiving packets with a bridge_vid as determined by
    dsa_tag_8021q_bridge_join(), dsa_8021q_rcv() will decode:
    - source_port = 0 (which isn't really valid, more like "don't know")
    - switch_id = 0 (which isn't really valid, more like "don't know")
    - vbid = value in range 1-7
    
    Since the blamed patch has reversed the order of the checks, we are now
    going to believe that source_port != -1 and switch_id != -1, so they're
    valid, but they aren't.
    
    The minimal solution to the problem is to only populate source_port and
    switch_id with what dsa_8021q_rcv() came up with, if the vbid is zero,
    i.e. the source port information is trustworthy.
    
    Fixes: c1ae02d87689 ("net: dsa: tag_sja1105: always prefer source port information from INCL_SRCPT")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Simon Horman <simon.horman@xxxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/dsa/tag_sja1105.c b/net/dsa/tag_sja1105.c
index 731dc3a111ef3..6e3699d859dbd 100644
--- a/net/dsa/tag_sja1105.c
+++ b/net/dsa/tag_sja1105.c
@@ -568,11 +568,14 @@ static struct sk_buff *sja1105_rcv(struct sk_buff *skb,
 		 * if available. This allows us to not overwrite a valid source
 		 * port and switch ID with zeroes when receiving link-local
 		 * frames from a VLAN-unaware bridged port (non-zero vbid) or a
-		 * VLAN-aware bridged port (non-zero vid).
+		 * VLAN-aware bridged port (non-zero vid). Furthermore, the
+		 * tag_8021q source port information is only of trust when the
+		 * vbid is 0 (precise port). Otherwise, tmp_source_port and
+		 * tmp_switch_id will be zeroes.
 		 */
-		if (source_port == -1)
+		if (vbid == 0 && source_port == -1)
 			source_port = tmp_source_port;
-		if (switch_id == -1)
+		if (vbid == 0 && switch_id == -1)
 			switch_id = tmp_switch_id;
 	} else if (source_port == -1 && switch_id == -1) {
 		/* Packets with no source information have no chance of



[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