From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Dumazet Subject: Re: [PATCH] netfilter/IPv6: initialize TOS field in REJECT target module Date: Fri, 22 Apr 2011 09:34:16 +0200 Message-ID: <1303457656.3134.12.camel@edumazet-laptop> References: <1303455759.2023.39.camel@nausicaa> <1303456743.2023.55.camel@nausicaa> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: netfilter-devel@vger.kernel.org, netdev@vger.kernel.org, yoshfuji@linux-ipv6.org, jengelh@medozas.de, davem@davemloft.net To: Fernando Luis Vazquez Cao Return-path: Received: from mail-ww0-f44.google.com ([74.125.82.44]:36185 "EHLO mail-ww0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752392Ab1DVHeV (ORCPT ); Fri, 22 Apr 2011 03:34:21 -0400 In-Reply-To: <1303456743.2023.55.camel@nausicaa> Sender: netdev-owner@vger.kernel.org List-ID: Le vendredi 22 avril 2011 =C3=A0 16:19 +0900, Fernando Luis Vazquez Cao= a =C3=A9crit : > 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. >=20 > We stumbled upon this issue when trying to apply a mangle rule to > the RST packet generated by the REJECT target module. >=20 > Signed-off-by: Fernando Luis Vazquez Cao > --- >=20 > 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 1= 0: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 =3D ipv6_hdr(oldskb); > struct ipv6hdr *ip6h; > +#define DEFAULT_TOS_VALUE 0x0U > + const __u8 tclass =3D DEFAULT_TOS_VALUE; > struct dst_entry *dst =3D 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 =3D ipv6_hdr(nskb); > - ip6h->version =3D 6; > + *(__be32 *)ip6h =3D htonl(0x60000000 | (tclass << 20)); It seems fine but I am wondering where is payload_len set ?