From ce3703c3295ce900d76e88b5cb2c17dd20360c51 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 (cherry picked from commit e2ea393eccd8da1402943132d477aa3f2bf1f629) --- 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 d7246d46e..556db6336 100644 --- a/kernel-module/xt_RTPENGINE.c +++ b/kernel-module/xt_RTPENGINE.c @@ -1709,13 +1709,14 @@ 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 long flags; g = get_target(t, &i->local); if (!g) return -ENOENT; i->ssrc = g->target.ssrc; - spin_lock(&g->ssrc_stats_lock); + spin_lock_irqsave(&g->ssrc_stats_lock, flags); i->ssrc_stats = g->ssrc_stats; if (reset) { @@ -1724,7 +1725,7 @@ static int table_get_target_stats(struct rtpengine_table *t, struct rtpengine_st g->ssrc_stats.total_lost = 0; } - spin_unlock(&g->ssrc_stats_lock); + spin_unlock_irqrestore(&g->ssrc_stats_lock, flags); target_put(g);