diff --git a/kernel-module/xt_MEDIAPROXY.c b/kernel-module/xt_MEDIAPROXY.c index 98f7a945e..54d7f8be5 100644 --- a/kernel-module/xt_MEDIAPROXY.c +++ b/kernel-module/xt_MEDIAPROXY.c @@ -2095,10 +2095,12 @@ static inline int is_muxed_rtcp(struct rtp_parsed *r) { return 1; } -static inline int is_dtls(struct rtp_parsed *r) { - if (r->header->m_pt < 20) +static inline int is_dtls(struct sk_buff *skb) { + if (skb->len < 1) return 0; - if (r->header->m_pt > 63) + if (skb->data[0] < 20) + return 0; + if (skb->data[0] > 63) return 0; return 1; } @@ -2165,6 +2167,8 @@ not_stun: goto out; src_check_ok: + if (g->target.dtls && is_dtls(skb)) + goto skip1; parse_rtp(&rtp, skb); if (!rtp.ok) { if (g->target.rtp_only) @@ -2173,8 +2177,6 @@ src_check_ok: } if (g->target.rtcp_mux && is_muxed_rtcp(&rtp)) goto skip1; - if (g->target.dtls && is_dtls(&rtp)) - goto skip1; pkt_idx = packet_index(&g->decrypt, &g->target.decrypt, rtp.header); if (srtp_auth_validate(&g->decrypt, &g->target.decrypt, &rtp, pkt_idx)) goto skip_error;