Message ID | 20241211144741.1415758-1-robert.hodaszi@digi.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 36ff681d2283410742489ce77e7b01419eccf58c |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] net: dsa: tag_ocelot_8021q: fix broken reception | expand |
On Wed, Dec 11, 2024 at 03:47:41PM +0100, Robert Hodaszi wrote: > The blamed commit changed the dsa_8021q_rcv() calling convention to > accept pre-populated source_port and switch_id arguments. If those are > not available, as in the case of tag_ocelot_8021q, the arguments must be > pre-initialized with -1. > > Due to the bug of passing uninitialized arguments in tag_ocelot_8021q, > dsa_8021q_rcv() does not detect that it needs to populate the > source_port and switch_id, and this makes dsa_conduit_find_user() fail, > which leads to packet loss on reception. > > Fixes: dcfe7673787b ("net: dsa: tag_sja1105: absorb logic for not overwriting precise info into dsa_8021q_rcv()") > Signed-off-by: Robert Hodaszi <robert.hodaszi@digi.com> > --- Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Wed, 11 Dec 2024 15:47:41 +0100 you wrote: > The blamed commit changed the dsa_8021q_rcv() calling convention to > accept pre-populated source_port and switch_id arguments. If those are > not available, as in the case of tag_ocelot_8021q, the arguments must be > pre-initialized with -1. > > Due to the bug of passing uninitialized arguments in tag_ocelot_8021q, > dsa_8021q_rcv() does not detect that it needs to populate the > source_port and switch_id, and this makes dsa_conduit_find_user() fail, > which leads to packet loss on reception. > > [...] Here is the summary with links: - [net,v2] net: dsa: tag_ocelot_8021q: fix broken reception https://git.kernel.org/netdev/net/c/36ff681d2283 You are awesome, thank you!
diff --git a/net/dsa/tag_ocelot_8021q.c b/net/dsa/tag_ocelot_8021q.c index 8e8b1bef6af6..11ea8cfd6266 100644 --- a/net/dsa/tag_ocelot_8021q.c +++ b/net/dsa/tag_ocelot_8021q.c @@ -79,7 +79,7 @@ static struct sk_buff *ocelot_xmit(struct sk_buff *skb, static struct sk_buff *ocelot_rcv(struct sk_buff *skb, struct net_device *netdev) { - int src_port, switch_id; + int src_port = -1, switch_id = -1; dsa_8021q_rcv(skb, &src_port, &switch_id, NULL, NULL);
The blamed commit changed the dsa_8021q_rcv() calling convention to accept pre-populated source_port and switch_id arguments. If those are not available, as in the case of tag_ocelot_8021q, the arguments must be pre-initialized with -1. Due to the bug of passing uninitialized arguments in tag_ocelot_8021q, dsa_8021q_rcv() does not detect that it needs to populate the source_port and switch_id, and this makes dsa_conduit_find_user() fail, which leads to packet loss on reception. Fixes: dcfe7673787b ("net: dsa: tag_sja1105: absorb logic for not overwriting precise info into dsa_8021q_rcv()") Signed-off-by: Robert Hodaszi <robert.hodaszi@digi.com> --- Cc: stable@vger.kernel.org --- net/dsa/tag_ocelot_8021q.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)