Patch "netfilter: flowtable: really fix NAT IPv6 offload" has been added to the 6.0-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: flowtable: really fix NAT IPv6 offload

to the 6.0-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-flowtable-really-fix-nat-ipv6-offload.patch
and it can be found in the queue-6.0 subdirectory.

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



commit 86455596c0f0ec085509822a996392ba511e38f8
Author: Qingfang DENG <dqfext@xxxxxxxxx>
Date:   Thu Dec 8 20:35:29 2022 +0800

    netfilter: flowtable: really fix NAT IPv6 offload
    
    [ Upstream commit 5fb45f95eec682621748b7cb012c6a8f0f981e6a ]
    
    The for-loop was broken from the start. It translates to:
    
            for (i = 0; i < 4; i += 4)
    
    which means the loop statement is run only once, so only the highest
    32-bit of the IPv6 address gets mangled.
    
    Fix the loop increment.
    
    Fixes: 0e07e25b481a ("netfilter: flowtable: fix NAT IPv6 offload mangling")
    Fixes: 5c27d8d76ce8 ("netfilter: nf_flow_table_offload: add IPv6 support")
    Signed-off-by: Qingfang DENG <dqfext@xxxxxxxxx>
    Signed-off-by: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/netfilter/nf_flow_table_offload.c b/net/netfilter/nf_flow_table_offload.c
index 0fdcdb2c9ae4..4d9b99abe37d 100644
--- a/net/netfilter/nf_flow_table_offload.c
+++ b/net/netfilter/nf_flow_table_offload.c
@@ -383,12 +383,12 @@ static void flow_offload_ipv6_mangle(struct nf_flow_rule *flow_rule,
 				     const __be32 *addr, const __be32 *mask)
 {
 	struct flow_action_entry *entry;
-	int i, j;
+	int i;
 
-	for (i = 0, j = 0; i < sizeof(struct in6_addr) / sizeof(u32); i += sizeof(u32), j++) {
+	for (i = 0; i < sizeof(struct in6_addr) / sizeof(u32); i++) {
 		entry = flow_action_entry_next(flow_rule);
 		flow_offload_mangle(entry, FLOW_ACT_MANGLE_HDR_TYPE_IP6,
-				    offset + i, &addr[j], mask);
+				    offset + i * sizeof(u32), &addr[i], mask);
 	}
 }
 



[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