summaryrefslogtreecommitdiffstats
path: root/target/linux/generic-2.4/patches/625-netfilter_nat_pptp_fix.patch
blob: c65c9614d7533dd76860088fb848b2e28b305a46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);