aboutsummaryrefslogtreecommitdiffstats
path: root/net/netfilter
diff options
context:
space:
mode:
authorPatrick McHardy <kaber@trash.net>2013-04-05 08:13:30 +0000
committerWilliam Roberts <wroberts@tresys.com>2013-11-18 07:54:35 -0800
commit210d1e111b6d4dd16f981b8a1330ca9c5f90d71f (patch)
treee5676b87cd92065a20a669733a29242c45219d15 /net/netfilter
parent7fc3ce7312fec9320aeffb1a6c6c6d4bf2408669 (diff)
downloadkernel_samsung_smdk4412-210d1e111b6d4dd16f981b8a1330ca9c5f90d71f.zip
kernel_samsung_smdk4412-210d1e111b6d4dd16f981b8a1330ca9c5f90d71f.tar.gz
kernel_samsung_smdk4412-210d1e111b6d4dd16f981b8a1330ca9c5f90d71f.tar.bz2
netfilter: nf_ct_sip: don't drop packets with offsets pointing outside the packet
Some Cisco phones create huge messages that are spread over multiple packets. After calculating the offset of the SIP body, it is validated to be within the packet and the packet is dropped otherwise. This breaks operation of these phones. Since connection tracking is supposed to be passive, just let those packets pass unmodified and untracked. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Conflicts: net/netfilter/nf_conntrack_sip.c This commit appears in the 3.8 and 3.9 branches of the Linux kernel and according to feanor3 on xda-developers: The "Cisco Jabber" app lets you use your cell phone as a SIP endpoint with your work number on a Cisco phone system. The registration packets that Cisco uses are apparently larger than normal. With your kernel, the registration does not complete. With your kernel and line 1421 changed to NF_ACCEPT, the registration complete Change-Id: If0c4eff68fa10af43767ad49808394910cae4309
Diffstat (limited to 'net/netfilter')
-rw-r--r--net/netfilter/nf_conntrack_sip.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c
index 93faf6a..4a8c55b 100644
--- a/net/netfilter/nf_conntrack_sip.c
+++ b/net/netfilter/nf_conntrack_sip.c
@@ -1468,7 +1468,7 @@ static int sip_help_tcp(struct sk_buff *skb, unsigned int protoff,
msglen = origlen = end - dptr;
if (msglen > datalen)
- return NF_DROP;
+ return NF_ACCEPT;
ret = process_sip_msg(skb, ct, dataoff, &dptr, &msglen);
if (ret != NF_ACCEPT)