From: Pablo Neira Ayuso <pablo@netfilter.org>
Date: Mon, 29 Jan 2024 10:09:43 +0000 (+0100)
Subject: netfilter: nf_log: replace BUG_ON by WARN_ON_ONCE when putting logger
X-Git-Tag: nvme-6.9-2024-03-07~175^2~2^2~1
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=259eb32971e9eb24d1777a28d82730659f50fdcb;p=nvme.git

netfilter: nf_log: replace BUG_ON by WARN_ON_ONCE when putting logger

Module reference is bumped for each user, this should not ever happen.

But BUG_ON check should use rcu_access_pointer() instead.

If this ever happens, do WARN_ON_ONCE() instead of BUG_ON() and
consolidate pointer check under the rcu read side lock section.

Fixes: fab4085f4e24 ("netfilter: log: nf_log_packet() as real unified interface")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---

diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
index 8cc52d2bd31b..e16f158388bb 100644
--- a/net/netfilter/nf_log.c
+++ b/net/netfilter/nf_log.c
@@ -193,11 +193,12 @@ void nf_logger_put(int pf, enum nf_log_type type)
 		return;
 	}
 
-	BUG_ON(loggers[pf][type] == NULL);
-
 	rcu_read_lock();
 	logger = rcu_dereference(loggers[pf][type]);
-	module_put(logger->me);
+	if (!logger)
+		WARN_ON_ONCE(1);
+	else
+		module_put(logger->me);
 	rcu_read_unlock();
 }
 EXPORT_SYMBOL_GPL(nf_logger_put);