Patch "netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
netfilter-xt_rateest-acquire-xt_rateest_mutex-for-hash-insert.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
7dc68e98757a8eccf8ca7a53a29b896f1eef1f76Mon Sep 17 00:00:00 2001
From: Cong Wang <[email protected]>
Date: Mon, 5 Feb 2018 14:41:45 -0800
Subject: netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
From: Cong Wang <[email protected]>
commit 7dc68e98757a8eccf8ca7a53a29b896f1eef1f76 upstream.
rateest_hash is supposed to be protected by xt_rateest_mutex, and, as suggested by Eric, lookup and insert should be atomic, so we should acquire the xt_rateest_mutex once for both.
So introduce a non-locking helper for internal use and keep the locking one for external.
--- net/netfilter/xt_RATEEST.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
net/netfilter/xt_RATEEST.c +17 -5
@@ -40,23 +40,31 @@ static void xt_rateest_hash_insert(struchlist_add_head (&est->list, &rateest_hash[h]); } -struct xt_rateest *xt_rateest_lookup (const char *name) +static struct xt_rateest *__xt_rateest_lookup (const char *name) {struct xt_rateest *est;unsigned int h; h =xt_rateest_hash (name); -mutex_lock (&xt_rateest_mutex);hlist_for_each_entry (est, &rateest_hash[h], list) {if (strcmp (est->name, name) ==0 ) { est->refcnt++; -mutex_unlock (&xt_rateest_mutex);return est; } } -mutex_unlock (&xt_rateest_mutex); +return NULL ; } + +struct xt_rateest *xt_rateest_lookup (const char *name) +{ +struct xt_rateest *est; + +mutex_lock (&xt_rateest_mutex); + est =__xt_rateest_lookup (name); +mutex_unlock (&xt_rateest_mutex); +return est; +}EXPORT_SYMBOL_GPL (xt_rateest_lookup);void xt_rateest_put (struct xt_rateest *est)
@@ -104,8 +112,10 @@ static int xt_rateest_tg_checkentry(cons rnd_inited = true; } - est =xt_rateest_lookup (info->name); +mutex_lock (&xt_rateest_mutex); + est =__xt_rateest_lookup (info->name);if (est) { +mutex_unlock (&xt_rateest_mutex);/* * If estimator parameters are specified, they must match the * existing estimator.
@@ -143,11 +153,13 @@ static int xt_rateest_tg_checkentry(cons info->est = est;xt_rateest_hash_insert (est); +mutex_unlock (&xt_rateest_mutex);return 0 ; err2:kfree (est); err1: +mutex_unlock (&xt_rateest_mutex);return ret; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/netfilter-xt_rateest-acquire-xt_rateest_mutex-for-hash-insert.patch queue-4.4/xfrm-check-id-proto-in-validate_tmpl.patch