From 2b7a1a174cfb18c764cdcbd565fbf45f5a5967bb Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 24 May 2022 09:13:37 -0400 Subject: [PATCH] TT#14008 use interrupt-safe lock for ssrc_stats_lock Despite this code being called from userspace, we must disable interrupts while having ssrc_stats_lock acquired, as the same lock is acquired elsewhere from within an interrupt context. closes #1492 Change-Id: Ia6f31eb876ee98ad355d12f9361cbc068d008608 --- kernel-module/xt_RTPENGINE.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel-module/xt_RTPENGINE.c b/kernel-module/xt_RTPENGINE.c index 9ea1301e3..10ef435e7 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -1792,12 +1792,13 @@ static struct re_dest_addr *find_dest_addr(const struct re_dest_addr_hash *h, co static int table_get_target_stats(struct rtpengine_table *t, struct rtpengine_stats_info *i, int reset) { struct rtpengine_target *g; unsigned int u; + unsigned long flags; g = get_target(t, &i->local); if (!g) return -ENOENT; - spin_lock(&g->ssrc_stats_lock); + spin_lock_irqsave(&g->ssrc_stats_lock, flags); for (u = 0; u < RTPE_NUM_SSRC_TRACKING; u++) { i->ssrc[u] = g->target.ssrc[u]; @@ -1810,7 +1811,7 @@ static int table_get_target_stats(struct rtpengine_table *t, struct rtpengine_st } } - spin_unlock(&g->ssrc_stats_lock); + spin_unlock_irqrestore(&g->ssrc_stats_lock, flags); target_put(g);