https://bz.apache.org/bugzilla/show_bug.cgi?id=69781

            Bug ID: 69781
           Summary: FileStore used with PersistentValve can cause
                    EOFException during session expiration checks and
                    dropped session
           Product: Tomcat 10
           Version: 10.1.44
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: aogb...@redhat.com
  Target Milestone: ------

The FileStore save and remove operations if done concurrently with load
attempts are not really thread safe.  The file writes/deletes from save or
remove can lop off the data that a load is attempting to read so that the load
attempt hits an EOFException.  This has been noted when using it combination
with a PersistentValve and PersistentManager:

    <Valve className="org.apache.catalina.valves.PersistentValve" />
    <Manager className="org.apache.catalina.session.PersistentManager"
processExpiresFrequency="1">
        <Store className="org.apache.catalina.session.FileStore" />
    </Manager>

If a FileStore save attempt from the PersistentValve at the end of a request
happens alongside a background processExpires check FileStore load attempt for
the same session, then this can induce an EOFException like below during the
load attempt:

SEVERE [Catalina-utility-1]
org.apache.catalina.session.StoreBase.processExpires Error processing session
expiration for key [3DFF110B8415939F736A5751783ECDA9]
        java.io.EOFException
                at
java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2933)
                at
java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3428)
                at
java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:985)
                at
java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:416)
                at
org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:87)
                at
org.apache.catalina.session.StoreBase.getObjectInputStream(StoreBase.java:204)
                at
org.apache.catalina.session.FileStore.load(FileStore.java:200)
                at
org.apache.catalina.session.StoreBase.processExpires(StoreBase.java:138)
                at
org.apache.catalina.session.PersistentManagerBase.processExpires(PersistentManagerBase.java:409)
                at
org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:587)
                at
org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:4837)
                at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1172)
                at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1176)
                at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1176)
                at
org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1154)
                at
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
                at
java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358)
                at
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
                at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
                at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
                at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
                at java.base/java.lang.Thread.run(Thread.java:1583)

That EOFException is then caught and handled at
https://github.com/apache/tomcat/blob/10.1.x/java/org/apache/catalina/session/StoreBase.java#L173
to result in the session being removed and dropped unexpectedly before any
expected expiration.

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to