mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 03:27:30 -04:00
netfilter: nf_conntrack_sip: validate skb_dst() before accessing it
tc ingress and openvswitch do not guarantee routing information to be available. These subsystems use the conntrack helper infrastructure, and the SIP helper relies on the skb_dst() to be present if sip_external_media is set to 1 (which is disabled by default as a module parameter). This effectively disables the sip_external_media toggle for these subsystems without resulting in a crash. Fixes:cae3a26275("openvswitch: Allow attaching helpers to ct action") Fixes:b57dc7c13e("net/sched: Introduce action ct") Cc: stable@vger.kernel.org Reported-by: Ren Wei <n05ec@lzu.edu.cn> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Florian Westphal <fw@strlen.de>
This commit is contained in:
committed by
Florian Westphal
parent
7cd9103283
commit
e5e24a365a
@@ -956,7 +956,6 @@ static int set_expected_rtp_rtcp(struct sk_buff *skb, unsigned int protoff,
|
||||
return NF_ACCEPT;
|
||||
saddr = &ct->tuplehash[!dir].tuple.src.u3;
|
||||
} else if (sip_external_media) {
|
||||
struct net_device *dev = skb_dst(skb)->dev;
|
||||
struct dst_entry *dst = NULL;
|
||||
struct flowi fl;
|
||||
|
||||
@@ -978,7 +977,11 @@ static int set_expected_rtp_rtcp(struct sk_buff *skb, unsigned int protoff,
|
||||
* through the same interface as the signalling peer.
|
||||
*/
|
||||
if (dst) {
|
||||
bool external_media = (dst->dev == dev);
|
||||
const struct dst_entry *this_dst = skb_dst(skb);
|
||||
bool external_media = false;
|
||||
|
||||
if (this_dst && dst->dev == this_dst->dev)
|
||||
external_media = true;
|
||||
|
||||
dst_release(dst);
|
||||
if (external_media)
|
||||
|
||||
Reference in New Issue
Block a user