This is an automated email from the ASF dual-hosted git repository.

FreeAndNil pushed a commit to branch Feature/AVSS-Fixes
in repository https://gitbox.apache.org/repos/asf/logging-log4net.git

commit 9dd998ab6d50e40ce1c01ab6c7fa851006e3a769
Author: Jan Friedrich <[email protected]>
AuthorDate: Sun Jun 21 23:18:10 2026 +0200

    Fix race condition in AppenderSkeleton filter chain modification
    Add lock(LockObj) to AddFilter and ClearFilters to synchronize with 
FilterEvent under concurrent logging (CWE-362).
---
 ...8-fix-appender-filter-chain-synchronization.xml | 11 ++++++++++
 src/log4net/Appender/AppenderSkeleton.cs           | 25 +++++++++++++++-------
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git 
a/src/changelog/3.3.2/298-fix-appender-filter-chain-synchronization.xml 
b/src/changelog/3.3.2/298-fix-appender-filter-chain-synchronization.xml
new file mode 100644
index 00000000..bcac92b1
--- /dev/null
+++ b/src/changelog/3.3.2/298-fix-appender-filter-chain-synchronization.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xmlns="https://logging.apache.org/xml/ns";
+       xsi:schemaLocation="https://logging.apache.org/xml/ns 
https://logging.apache.org/xml/ns/log4j-changelog-0.xsd";
+       type="fixed">
+  <issue id="f57d7b3-001" 
link="https://github.com/apache/tooling-agents/blob/main/ASVS/reports/logging-log4net/f57d7b3/issues.md#issue-finding-001---filter-chain-modification-methods-lack-synchronization-creating-potential-race-with-filterevent-under-active-logging"/>
+  <issue id="298" link="https://github.com/apache/logging-log4net/pull/298"/>
+  <description format="asciidoc">
+    fix race condition in `AppenderSkeleton.AddFilter` and `ClearFilters` 
under concurrent logging (CWE-362)
+  </description>
+</entry>
diff --git a/src/log4net/Appender/AppenderSkeleton.cs 
b/src/log4net/Appender/AppenderSkeleton.cs
index 5e0052c2..6fb3ab3a 100644
--- a/src/log4net/Appender/AppenderSkeleton.cs
+++ b/src/log4net/Appender/AppenderSkeleton.cs
@@ -456,14 +456,17 @@ protected virtual bool FilterEvent(LoggingEvent 
loggingEvent)
   public virtual void AddFilter(IFilter filter)
   {
     filter.EnsureNotNull();
-    if (FilterHead is null)
-    {
-      FilterHead = _tailFilter = filter;
-    }
-    else
+    lock (LockObj)
     {
-      _tailFilter!.Next = filter;
-      _tailFilter = filter;
+      if (FilterHead is null)
+      {
+        FilterHead = _tailFilter = filter;
+      }
+      else
+      {
+        _tailFilter!.Next = filter;
+        _tailFilter = filter;
+      }
     }
   }
 
@@ -475,7 +478,13 @@ public virtual void AddFilter(IFilter filter)
   /// Clears the filter list for this appender.
   /// </para>
   /// </remarks>
-  public virtual void ClearFilters() => FilterHead = _tailFilter = null;
+  public virtual void ClearFilters()
+  {
+    lock (LockObj)
+    {
+      FilterHead = _tailFilter = null;
+    }
+  }
 
   /// <summary>
   /// Checks if the message level is below this appender's threshold.

Reply via email to