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

Commit 2f0b3215 authored by Mohammed Javid's avatar Mohammed Javid
Browse files

[SIP] Adding check for SIP/2.0 for packets recieved at SIP port



Packets arriving at SIP port will now be checked for SIP/2.0 before
getting tagged as SIP packet. Added helper functions strnstr and strnstrn
for checking substring in a string in case of non null trmination.

Acked-by: default avatarSudhanshu Singh <sudhsing@codeaurora.org>
Signed-off-by: default avatarMohammed Javid <mjavid@codeaurora.org>
Change-Id: Ia7d6a3ac5dd1e5f0ce97ee9f6d0c13f16d9dd7f2
parent ef41bbca
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
/* SIP extension for IP connection tracking.
 *
 * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
 * (C) 2005 by Christian Hentschel <chentschel@arnet.com.ar>
 * based on RR's ip_conntrack_ftp.c and other modules.
 * (C) 2007 United Security Providers
@@ -1934,6 +1934,10 @@ static int sip_help_tcp(struct sk_buff *skb, unsigned int protoff,
	if (datalen < strlen("SIP/2.0 200"))
		return NF_ACCEPT;

	/* Check if the header contains SIP version */
	if (!strnstr(dptr, "SIP/2.0", datalen))
		return NF_ACCEPT;

	/* here we save the original datalength and data offset of the skb, this
	 * is needed later to split combined skbs
	 */
@@ -2173,6 +2177,10 @@ static int sip_help_udp(struct sk_buff *skb, unsigned int protoff,
	if (datalen < strlen("SIP/2.0 200"))
		return NF_ACCEPT;

	/* Check if the header contains SIP version */
	if (!strnstr(dptr, "SIP/2.0", datalen))
		return NF_ACCEPT;

	return process_sip_msg(skb, ct, protoff, dataoff, &dptr, &datalen);
}