<?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://vulnerability.circl.lu</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>Tue, 06 Oct 2026 20:30:30 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-26960 — mm: swap: fix race between free_swap_and_cache() and swapoff()</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-26960</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, linux_kernel, Siemens SIMATIC S7-1500 TM MFP - GNU/Linux subsystem&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;mm: swap: fix race between free_swap_and_cache() and swapoff()&lt;/p&gt;
&lt;p&gt;There was previously a theoretical window where swapoff() could run and
teardown a swap_info_struct while a call to free_swap_and_cache() was
running in another thread.  This could cause, amongst other bad
possibilities, swap_page_trans_huge_swapped() (called by
free_swap_and_cache()) to access the freed memory for swap_map.&lt;/p&gt;
&lt;p&gt;This is a theoretical problem and I haven&amp;#39;t been able to provoke it from a
test case.  But there has been agreement based on code review that this is
possible (see link below).&lt;/p&gt;
&lt;p&gt;Fix it by using get_swap_device()/put_swap_device(), which will stall
swapoff().  There was an extra check in _swap_info_get() to confirm that
the swap entry was not free.  This isn&amp;#39;t present in get_swap_device()
because it doesn&amp;#39;t make sense in general due to the race between getting
the reference and swapoff.  So I&amp;#39;ve added an equivalent check directly in
free_swap_and_cache().&lt;/p&gt;
&lt;p&gt;Details of how to provoke one possible issue (thanks to David Hildenbrand
for deriving this):&lt;/p&gt;
&lt;p&gt;--8&amp;lt;-----&lt;/p&gt;
&lt;p&gt;__swap_entry_free() might be the last user and result in
&amp;#34;count == SWAP_HAS_CACHE&amp;#34;.&lt;/p&gt;
&lt;p&gt;swapoff-&amp;gt;try_to_unuse() will stop as soon as soon as si-&amp;gt;inuse_pages==0.&lt;/p&gt;
&lt;p&gt;So the question is: could someone reclaim the folio and turn
si-&amp;gt;inuse_pages==0, before we completed swap_page_trans_huge_swapped().&lt;/p&gt;
&lt;p&gt;Imagine the following: 2 MiB folio in the swapcache. Only 2 subpages are
stil…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, linux_kernel, Siemens SIMATIC S7-1500 TM MFP - GNU/Linux subsystem&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;mm: swap: fix race between free_swap_and_cache() and swapoff()&lt;/p&gt;
&lt;p&gt;There was previously a theoretical window where swapoff() could run and
teardown a swap_info_struct while a call to free_swap_and_cache() was
running in another thread.  This could cause, amongst other bad
possibilities, swap_page_trans_huge_swapped() (called by
free_swap_and_cache()) to access the freed memory for swap_map.&lt;/p&gt;
&lt;p&gt;This is a theoretical problem and I haven&amp;#39;t been able to provoke it from a
test case.  But there has been agreement based on code review that this is
possible (see link below).&lt;/p&gt;
&lt;p&gt;Fix it by using get_swap_device()/put_swap_device(), which will stall
swapoff().  There was an extra check in _swap_info_get() to confirm that
the swap entry was not free.  This isn&amp;#39;t present in get_swap_device()
because it doesn&amp;#39;t make sense in general due to the race between getting
the reference and swapoff.  So I&amp;#39;ve added an equivalent check directly in
free_swap_and_cache().&lt;/p&gt;
&lt;p&gt;Details of how to provoke one possible issue (thanks to David Hildenbrand
for deriving this):&lt;/p&gt;
&lt;p&gt;--8&amp;lt;-----&lt;/p&gt;
&lt;p&gt;__swap_entry_free() might be the last user and result in
&amp;#34;count == SWAP_HAS_CACHE&amp;#34;.&lt;/p&gt;
&lt;p&gt;swapoff-&amp;gt;try_to_unuse() will stop as soon as soon as si-&amp;gt;inuse_pages==0.&lt;/p&gt;
&lt;p&gt;So the question is: could someone reclaim the folio and turn
si-&amp;gt;inuse_pages==0, before we completed swap_page_trans_huge_swapped().&lt;/p&gt;
&lt;p&gt;Imagine the following: 2 MiB folio in the swapcache. Only 2 subpages are
stil…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-26960</guid>
    </item>
    <item>
      <title>LSN-0107-1 — Kernel Live Patch Security Notice</title>
      <link>https://vulnerability.circl.lu/vuln/lsn-0107-1</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:Pro:14.04:LTS: linux-lts-xenial, Ubuntu:Pro:16.04:LTS: linux-aws-hwe, Ubuntu:Pro:16.04:LTS: linux-aws, Ubuntu:Pro:16.04:LTS: linux-azure, Ubuntu:Pro:16.04:LTS: linux-gcp, Ubuntu:Pro:16.04:LTS: linux-hwe, Ubuntu:Pro:16.04:LTS: linux, Ubuntu:Pro:18.04:LTS: linux-aws, Ubuntu:Pro:18.04:LTS: linux-azure-4.15, Ubuntu:Pro:18.04:LTS: linux-gcp-4.15 and 31 more&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been
resolved: inet: inet_defrag: prevent sk release while still in use
ip_local_out() and other functions can pass skb-&amp;gt;sk as function argument.
If the skb is a fragment and reassembly happens before such function call
returns, the sk must not be released. This affects skb fragments
reassembled via netfilter or similar modules, e.g. openvswitch or ct_act.c,
when run as part of tx pipeline. Eric Dumazet made an initial analysis of
this bug. Quoting Eric: Calling ip_defrag() in output path is also implying
skb_orphan(), which is buggy because output path relies on sk not
disappearing. A relevant old patch about the issue was : 8282f27449bf
(&amp;#39;inet: frag: Always orphan skbs inside ip_defrag()&amp;#39;) [..
net/ipv4/ip_output.c depends on skb-&amp;gt;sk being set, and probably to an inet
socket, not an arbitrary one. If we orphan the packet in ipvlan, then
downstream things like FQ packet scheduler will not work properly. We need
to change ip_defrag() to only use skb_orphan() when really needed, ie
whenever frag_list is going to be used. Eric suggested to stash sk in
fragment queue and made an initial patch. However there is a problem with
this: If skb is refragmented again right after, ip_do_fragment() will copy
head-&amp;gt;sk to the new fragments, and sets up destructor to sock_wfree. IOW,
we have no choice but to fix up sk_wmem accouting to reflect the fully
reassembled skb, else wmem will underflow. This change moves the orphan
down into the c…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:Pro:14.04:LTS: linux-lts-xenial, Ubuntu:Pro:16.04:LTS: linux-aws-hwe, Ubuntu:Pro:16.04:LTS: linux-aws, Ubuntu:Pro:16.04:LTS: linux-azure, Ubuntu:Pro:16.04:LTS: linux-gcp, Ubuntu:Pro:16.04:LTS: linux-hwe, Ubuntu:Pro:16.04:LTS: linux, Ubuntu:Pro:18.04:LTS: linux-aws, Ubuntu:Pro:18.04:LTS: linux-azure-4.15, Ubuntu:Pro:18.04:LTS: linux-gcp-4.15 and 31 more&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been
resolved: inet: inet_defrag: prevent sk release while still in use
ip_local_out() and other functions can pass skb-&amp;gt;sk as function argument.
If the skb is a fragment and reassembly happens before such function call
returns, the sk must not be released. This affects skb fragments
reassembled via netfilter or similar modules, e.g. openvswitch or ct_act.c,
when run as part of tx pipeline. Eric Dumazet made an initial analysis of
this bug. Quoting Eric: Calling ip_defrag() in output path is also implying
skb_orphan(), which is buggy because output path relies on sk not
disappearing. A relevant old patch about the issue was : 8282f27449bf
(&amp;#39;inet: frag: Always orphan skbs inside ip_defrag()&amp;#39;) [..
net/ipv4/ip_output.c depends on skb-&amp;gt;sk being set, and probably to an inet
socket, not an arbitrary one. If we orphan the packet in ipvlan, then
downstream things like FQ packet scheduler will not work properly. We need
to change ip_defrag() to only use skb_orphan() when really needed, ie
whenever frag_list is going to be used. Eric suggested to stash sk in
fragment queue and made an initial patch. However there is a problem with
this: If skb is refragmented again right after, ip_do_fragment() will copy
head-&amp;gt;sk to the new fragments, and sets up destructor to sock_wfree. IOW,
we have no choice but to fix up sk_wmem accouting to reflect the fully
reassembled skb, else wmem will underflow. This change moves the orphan
down into the c…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/lsn-0107-1</guid>
    </item>
  </channel>
</rss>
