Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c07bc1ff authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[NETFILTER]: Fix return value confusion in PPTP NAT helper



ip_nat_mangle_tcp_packet doesn't return NF_* values but 0/1 for
failure/success.

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 03b9feca
Loading
Loading
Loading
Loading
+13 −23
Original line number Diff line number Diff line
@@ -299,8 +299,6 @@ pptp_inbound_pkt(struct sk_buff **pskb,
	u_int16_t msg, new_cid = 0, new_pcid;
	unsigned int pcid_off, cid_off = 0;

	int ret = NF_ACCEPT, rv;

	new_pcid = htons(nat_pptp_info->pns_call_id);

	switch (msg = ntohs(ctlh->messageType)) {
@@ -346,31 +344,23 @@ pptp_inbound_pkt(struct sk_buff **pskb,
	DEBUGP("altering peer call id from 0x%04x to 0x%04x\n",
		ntohs(*(u_int16_t *)pptpReq + pcid_off), ntohs(new_pcid));

	rv = ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
	if (ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
	                             pcid_off + sizeof(struct pptp_pkt_hdr) +
				     sizeof(struct PptpControlHeader),
				     sizeof(new_pcid), (char *)&new_pcid,
				      sizeof(new_pcid));
	if (rv != NF_ACCEPT) 
		return rv;
				     sizeof(new_pcid)) == 0)
		return NF_DROP;

	if (new_cid) {
		DEBUGP("altering call id from 0x%04x to 0x%04x\n",
			ntohs(*(u_int16_t *)pptpReq + cid_off), ntohs(new_cid));
		rv = ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
		if (ip_nat_mangle_tcp_packet(pskb, ct, ctinfo,
		                             cid_off + sizeof(struct pptp_pkt_hdr) +
					     sizeof(struct PptpControlHeader),
					     sizeof(new_cid), (char *)&new_cid,
					      sizeof(new_cid));
		if (rv != NF_ACCEPT)
			return rv;
					     sizeof(new_cid)) == 0)
			return NF_DROP;
	}

	/* check for earlier return value of 'switch' above */
	if (ret != NF_ACCEPT)
		return ret;

	/* great, at least we don't need to resize packets */
	return NF_ACCEPT;
}