summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-05-21 19:35:10 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2009-05-21 19:35:10 +0000
commit58a43af3506199c82f06fcd9980a9846c168461d (patch)
tree2429bebec4b10b4c7d548bcfc21736cfad66dd55 /target/linux
parent7637d8284b9b55248ad05ef89154b0770550bc48 (diff)
brcm-2.4: potential fix for pptp nat
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@15970 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/generic-2.4/patches/625-netfilter_nat_pptp_fix.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/target/linux/generic-2.4/patches/625-netfilter_nat_pptp_fix.patch b/target/linux/generic-2.4/patches/625-netfilter_nat_pptp_fix.patch
new file mode 100644
index 0000000000..c65c9614d7
--- /dev/null
+++ b/target/linux/generic-2.4/patches/625-netfilter_nat_pptp_fix.patch
@@ -0,0 +1,53 @@
+--- a/net/ipv4/netfilter/ip_conntrack_pptp.c
++++ b/net/ipv4/netfilter/ip_conntrack_pptp.c
+@@ -134,12 +134,11 @@ static int pptp_expectfn(struct ip_connt
+ }
+
+ /* timeout GRE data connections */
+-static int pptp_timeout_related(struct ip_conntrack *ct)
++static int pptp_timeout_related(struct ip_conntrack *ct, const struct iphdr *iph)
+ {
+ struct list_head *cur_item, *next;
+ struct ip_conntrack_expect *exp;
+ enum ip_conntrack_info ctinfo;
+- struct iphdr *iph;
+
+ /* FIXME: do we have to lock something ? */
+ for (cur_item = ct->sibling_list.next;
+@@ -245,7 +244,8 @@ pptp_inbound_pkt(struct tcphdr *tcph,
+ struct pptp_pkt_hdr *pptph,
+ size_t datalen,
+ struct ip_conntrack *ct,
+- enum ip_conntrack_info ctinfo)
++ enum ip_conntrack_info ctinfo,
++ const struct iphdr *iph)
+ {
+ struct PptpControlHeader *ctlh;
+ union pptp_ctrl_union pptpReq;
+@@ -377,7 +377,7 @@ pptp_inbound_pkt(struct tcphdr *tcph,
+ info->cstate = PPTP_CALL_NONE;
+
+ /* untrack this call id, unexpect GRE packets */
+- pptp_timeout_related(ct);
++ pptp_timeout_related(ct, iph);
+ break;
+
+ case PPTP_WAN_ERROR_NOTIFY:
+@@ -539,7 +539,7 @@ conntrack_pptp_help(const struct iphdr *
+ info->cstate = PPTP_CALL_NONE;
+
+ /* untrack this call id, unexpect GRE packets */
+- pptp_timeout_related(ct);
++ pptp_timeout_related(ct, iph);
+ }
+
+
+@@ -571,7 +571,7 @@ conntrack_pptp_help(const struct iphdr *
+ ret = pptp_outbound_pkt(tcph, pptph, datalen, ct, ctinfo);
+ else
+ /* server -> client (PAC -> PNS) */
+- ret = pptp_inbound_pkt(tcph, pptph, datalen, ct, ctinfo);
++ ret = pptp_inbound_pkt(tcph, pptph, datalen, ct, ctinfo, iph);
+ DEBUGP("sstate: %d->%d, cstate: %d->%d\n",
+ oldsstate, info->sstate, oldcstate, info->cstate);
+ UNLOCK_BH(&ip_pptp_lock);