Skip to content

Commit 3f509c6

Browse files
committed
netfilter: nf_nat_sip: fix incorrect handling of EBUSY for RTCP expectation
We're hitting bug while trying to reinsert an already existing expectation: kernel BUG at kernel/timer.c:895! invalid opcode: 0000 [#1] SMP [...] Call Trace: <IRQ> [<ffffffffa0069563>] nf_ct_expect_related_report+0x4a0/0x57a [nf_conntrack] [<ffffffff812d423a>] ? in4_pton+0x72/0x131 [<ffffffffa00ca69e>] ip_nat_sdp_media+0xeb/0x185 [nf_nat_sip] [<ffffffffa00b5b9b>] set_expected_rtp_rtcp+0x32d/0x39b [nf_conntrack_sip] [<ffffffffa00b5f15>] process_sdp+0x30c/0x3ec [nf_conntrack_sip] [<ffffffff8103f1eb>] ? irq_exit+0x9a/0x9c [<ffffffffa00ca738>] ? ip_nat_sdp_media+0x185/0x185 [nf_nat_sip] We have to remove the RTP expectation if the RTCP expectation hits EBUSY since we keep trying with other ports until we succeed. Reported-by: Rafal Fitt <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 6fc09f1 commit 3f509c6

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

net/ipv4/netfilter/nf_nat_sip.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,10 @@ static unsigned int ip_nat_sdp_media(struct sk_buff *skb, unsigned int dataoff,
502502
ret = nf_ct_expect_related(rtcp_exp);
503503
if (ret == 0)
504504
break;
505-
else if (ret != -EBUSY) {
505+
else if (ret == -EBUSY) {
506+
nf_ct_unexpect_related(rtp_exp);
507+
continue;
508+
} else if (ret < 0) {
506509
nf_ct_unexpect_related(rtp_exp);
507510
port = 0;
508511
break;

0 commit comments

Comments
 (0)