hi, in pf_translate, when we're changing addresses for the icmp messages
there's an unjustified fallthrough in the IPPROTO_ICMPV6 case. in fact
this doesn't seem to harm anything because default case performs the
same operation. note that pd->ip_sum is null in ipv6 case so pf_change_a6
just punches a translation address to the packet with PF_ACPY.
henning@ agrees that this fallthrough was introduced by mistake, but we
won't mind if somebody with pf knowledge will glance through the code.
cvs diff -r1.657 -r1.658 pf.c might be handy.
ok?
Index: pf.c
===================================================================
RCS file: /home/cvs/src/sys/net/pf.c,v
retrieving revision 1.722
diff -u -p -U10 -r1.722 pf.c
--- pf.c 22 Jan 2011 11:43:57 -0000 1.722
+++ pf.c 2 Feb 2011 15:01:38 -0000
@@ -3342,21 +3342,21 @@ pf_translate(struct pf_pdesc *pd, struct
&pd->hdr.icmp6->icmp6_cksum, saddr, 0);
rewrite = 1;
}
if (PF_ANEQ(daddr, pd->dst, pd->af)) {
pf_change_a6(pd->dst,
&pd->hdr.icmp6->icmp6_cksum, daddr, 0);
rewrite = 1;
}
break;
}
- /* FALLTHROUGH */
+ break;
#endif /* INET6 */
default:
switch (pd->af) {
#ifdef INET
case AF_INET:
if (PF_ANEQ(saddr, pd->src, pd->af)) {
pf_change_a(&pd->src->v4.s_addr, pd->ip_sum,
saddr->v4.s_addr, 0);
rewrite = 1;