From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fernando Luis Vazquez Cao Subject: [PATCH] netfilter/IPv6: initialize TOS field in REJECT target module Date: Fri, 22 Apr 2011 16:19:03 +0900 Message-ID: <1303456743.2023.55.camel@nausicaa> References: <1303455759.2023.39.camel@nausicaa> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit Cc: netdev@vger.kernel.org, yoshfuji@linux-ipv6.org, jengelh@medozas.de, davem@davemloft.net To: netfilter-devel@vger.kernel.org Return-path: In-Reply-To: <1303455759.2023.39.camel@nausicaa> Sender: netdev-owner@vger.kernel.org List-Id: netfilter-devel.vger.kernel.org The IPv6 header is not zeroed out in alloc_skb so we must initialize it properly unless we want to see IPv6 packets with random TOS fields floating around. The current implementation resets the flow label but this could be changed if deemed necessary. We stumbled upon this issue when trying to apply a mangle rule to the RST packet generated by the REJECT target module. Signed-off-by: Fernando Luis Vazquez Cao --- diff -urNp linux-2.6.38.4-orig/net/ipv6/netfilter/ip6t_REJECT.c linux-2.6.38.4/net/ipv6/netfilter/ip6t_REJECT.c --- linux-2.6.38.4-orig/net/ipv6/netfilter/ip6t_REJECT.c 2011-03-15 10:20:32.000000000 +0900 +++ linux-2.6.38.4/net/ipv6/netfilter/ip6t_REJECT.c 2011-04-22 15:00:30.695373543 +0900 @@ -45,6 +45,8 @@ static void send_reset(struct net *net, int tcphoff, needs_ack; const struct ipv6hdr *oip6h = ipv6_hdr(oldskb); struct ipv6hdr *ip6h; +#define DEFAULT_TOS_VALUE 0x0U + const __u8 tclass = DEFAULT_TOS_VALUE; struct dst_entry *dst = NULL; u8 proto; struct flowi fl; @@ -123,7 +125,7 @@ static void send_reset(struct net *net, skb_put(nskb, sizeof(struct ipv6hdr)); skb_reset_network_header(nskb); ip6h = ipv6_hdr(nskb); - ip6h->version = 6; + *(__be32 *)ip6h = htonl(0x60000000 | (tclass << 20)); ip6h->hop_limit = ip6_dst_hoplimit(dst); ip6h->nexthdr = IPPROTO_TCP; ipv6_addr_copy(&ip6h->saddr, &oip6h->daddr);