<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sat, 31 Oct 2026 17:58:34 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-112934 — filelock: SoftReadWriteLock holder refresh writes through a hard link and hangs on a named pipe that another local user…</title>
      <link>https://db.gcve.eu/vuln/cve-2026-112934</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; tox-dev filelock&lt;/p&gt;
&lt;p&gt;filelock is a platform-independent file lock for Python. From 4.0.0 until 4.2.1, SoftReadWriteLock refreshes holder records by name, allowing another local user with rename access to the lock directory to replace a record with a named pipe and stall the lock, or under a permissive hard-link policy to link a reachable target file and cause the lock user to write through it. This issue is fixed in version 4.2.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; tox-dev filelock&lt;/p&gt;
&lt;p&gt;filelock is a platform-independent file lock for Python. From 4.0.0 until 4.2.1, SoftReadWriteLock refreshes holder records by name, allowing another local user with rename access to the lock directory to replace a record with a named pipe and stall the lock, or under a permissive hard-link policy to link a reachable target file and cause the lock user to write through it. This issue is fixed in version 4.2.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-112934</guid>
    </item>
    <item>
      <title>GHSA-fj95-fr6c-h845 — filelock: SoftReadWriteLock holder refresh writes through a hard link and hangs on a named pipe that another local user…</title>
      <link>https://db.gcve.eu/vuln/ghsa-fj95-fr6c-h845</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: filelock&lt;/p&gt;
&lt;p&gt;`SoftReadWriteLock` (and `AsyncSoftReadWriteLock`, which wraps one) refreshes its holder record (the file under `&amp;lt;path&amp;gt;.rw/holders/` that says a process holds or wants the lock) on every poll of a waiting acquire and on every heartbeat (the periodic refresh a holder runs to keep its record fresh). It does so by reopening `&amp;lt;path&amp;gt;.rw/holders/&amp;lt;token&amp;gt;` by name with a plain blocking `O_WRONLY | O_NOFOLLOW` open and writing at offset 0, without checking what it opened. `O_NOFOLLOW` makes the open fail only when the final name is a symbolic link (a file that redirects to another path).&lt;/p&gt;
&lt;p&gt;A different local user (the other user below) who owns the lock&amp;#39;s `.rw` tree reads the token of the user running the lock (the lock user below) from the `holders/` listing and renames another node over the record. The other user owns the tree because it created it first in a sticky directory such as `/tmp` (the sticky bit is a directory flag that lets only a file&amp;#39;s owner rename or remove it), or because it can write a lock directory without the sticky bit.&lt;/p&gt;
&lt;p&gt;A FIFO (a named pipe: a file whose open for writing blocks until some process opens it for reading) makes the lock user&amp;#39;s `write_lock()` / `read_lock()` hang regardless of `timeout`. It also stops a lock holder&amp;#39;s heartbeat thread without `on_compromise` (the callback that tells a holder it lost the lock) ever running, so the lock grants a second process while the first still believes it holds it. This works on a default Linux.&lt;/p&gt;
&lt;p&gt;Where the kernel l…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: filelock&lt;/p&gt;
&lt;p&gt;`SoftReadWriteLock` (and `AsyncSoftReadWriteLock`, which wraps one) refreshes its holder record (the file under `&amp;lt;path&amp;gt;.rw/holders/` that says a process holds or wants the lock) on every poll of a waiting acquire and on every heartbeat (the periodic refresh a holder runs to keep its record fresh). It does so by reopening `&amp;lt;path&amp;gt;.rw/holders/&amp;lt;token&amp;gt;` by name with a plain blocking `O_WRONLY | O_NOFOLLOW` open and writing at offset 0, without checking what it opened. `O_NOFOLLOW` makes the open fail only when the final name is a symbolic link (a file that redirects to another path).&lt;/p&gt;
&lt;p&gt;A different local user (the other user below) who owns the lock&amp;#39;s `.rw` tree reads the token of the user running the lock (the lock user below) from the `holders/` listing and renames another node over the record. The other user owns the tree because it created it first in a sticky directory such as `/tmp` (the sticky bit is a directory flag that lets only a file&amp;#39;s owner rename or remove it), or because it can write a lock directory without the sticky bit.&lt;/p&gt;
&lt;p&gt;A FIFO (a named pipe: a file whose open for writing blocks until some process opens it for reading) makes the lock user&amp;#39;s `write_lock()` / `read_lock()` hang regardless of `timeout`. It also stops a lock holder&amp;#39;s heartbeat thread without `on_compromise` (the callback that tells a holder it lost the lock) ever running, so the lock grants a second process while the first still believes it holds it. This works on a default Linux.&lt;/p&gt;
&lt;p&gt;Where the kernel l…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-fj95-fr6c-h845</guid>
    </item>
  </channel>
</rss>
