From fbbca68790708c280acaea4e771d1fdba71833c6 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Sat, 10 Jan 2009 08:23:27 +0100 Subject: [PATCH] ipp2p: partial revert of 3c8131b9 Revert part of 3c8131b976d2fb61c8e54437658bc632b46fd77f. The transport header offset is not (yet) set by the time Netfilter is invoked so using tcp_hdr/udp_hdr has undefined behavior. --- extensions/xt_ipp2p.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/xt_ipp2p.c b/extensions/xt_ipp2p.c index 3c5f238..83fa201 100644 --- a/extensions/xt_ipp2p.c +++ b/extensions/xt_ipp2p.c @@ -837,7 +837,7 @@ ipp2p_mt(const struct sk_buff *skb, const struct xt_match_param *par) switch (ip->protocol) { case IPPROTO_TCP: /* what to do with a TCP packet */ { - const struct tcphdr *tcph = tcp_hdr(skb); + const struct tcphdr *tcph = (const void *)ip + ip_hdrlen(skb); if (tcph->fin) return 0; /* if FIN bit is set bail out */ if (tcph->syn) return 0; /* if SYN bit is set bail out */ @@ -864,7 +864,7 @@ ipp2p_mt(const struct sk_buff *skb, const struct xt_match_param *par) case IPPROTO_UDP: /* what to do with an UDP packet */ { - const struct udphdr *udph = udp_hdr(skb); + const struct udphdr *udph = (const void *)ip + ip_hdrlen(skb); while (udp_list[i].command) { if ((info->cmd & udp_list[i].command) == udp_list[i].command &&