Patch "netfilter: fix regression in looped (broad|multi)cast's MAC handling" has been added to the 5.15-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

    netfilter: fix regression in looped (broad|multi)cast's MAC handling

to the 5.15-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:
     netfilter-fix-regression-in-looped-broad-multi-cast-.patch
and it can be found in the queue-5.15 subdirectory.

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



commit 4905673e153fbb82848ae007db223b5c15594029
Author: Ignacy Gawędzki <ignacy.gawedzki@xxxxxxxxxxxxxxxxxxxxxxx>
Date:   Fri Dec 10 16:31:27 2021 +0100

    netfilter: fix regression in looped (broad|multi)cast's MAC handling
    
    [ Upstream commit ebb966d3bdfed581ecccbb4a7432341baf7619b4 ]
    
    In commit 5648b5e1169f ("netfilter: nfnetlink_queue: fix OOB when mac
    header was cleared"), the test for non-empty MAC header introduced in
    commit 2c38de4c1f8da7 ("netfilter: fix looped (broad|multi)cast's MAC
    handling") has been replaced with a test for a set MAC header.
    
    This breaks the case when the MAC header has been reset (using
    skb_reset_mac_header), as is the case with looped-back multicast
    packets.  As a result, the packets ending up in NFQUEUE get a bogus
    hwaddr interpreted from the first bytes of the IP header.
    
    This patch adds a test for a non-empty MAC header in addition to the
    test for a set MAC header.  The same two tests are also implemented in
    nfnetlink_log.c, where the initial code of commit 2c38de4c1f8da7
    ("netfilter: fix looped (broad|multi)cast's MAC handling") has not been
    touched, but where supposedly the same situation may happen.
    
    Fixes: 5648b5e1169f ("netfilter: nfnetlink_queue: fix OOB when mac header was cleared")
    Signed-off-by: Ignacy Gawędzki <ignacy.gawedzki@xxxxxxxxxxxxxxxxxxxxxxx>
    Reviewed-by: Florian Westphal <fw@xxxxxxxxx>
    Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
index 691ef4cffdd90..7f83f9697fc14 100644
--- a/net/netfilter/nfnetlink_log.c
+++ b/net/netfilter/nfnetlink_log.c
@@ -556,7 +556,8 @@ __build_packet_message(struct nfnl_log_net *log,
 		goto nla_put_failure;
 
 	if (indev && skb->dev &&
-	    skb->mac_header != skb->network_header) {
+	    skb_mac_header_was_set(skb) &&
+	    skb_mac_header_len(skb) != 0) {
 		struct nfulnl_msg_packet_hw phw;
 		int len;
 
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index 4acc4b8e9fe5a..959527708e382 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -560,7 +560,8 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
 		goto nla_put_failure;
 
 	if (indev && entskb->dev &&
-	    skb_mac_header_was_set(entskb)) {
+	    skb_mac_header_was_set(entskb) &&
+	    skb_mac_header_len(entskb) != 0) {
 		struct nfqnl_msg_packet_hw phw;
 		int len;
 



[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