--- 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);