Linux Kernel up to 6.8.2 free_swap_and_cache/swapoff race condition

CVSS Meta Temp Score
CVSS is a standardized scoring system to determine possibilities of attacks. The Temp Score considers temporal factors like disclosure, exploit and countermeasures. The unique Meta Score calculates the average score of different sources to provide a normalized scoring system.
Current Exploit Price (≈)
Our analysts are monitoring exploit markets and are in contact with vulnerability brokers. The range indicates the observed or calculated exploit price to be seen on exploit markets. A good indicator to understand the monetary effort required for and the popularity of an attack.
CTI Interest Score
Our Cyber Threat Intelligence team is monitoring different web sites, mailing lists, exploit markets and social media networks. The CTI Interest Score identifies the interest of attackers and the security community for this specific vulnerability in real-time. A high score indicates an elevated risk to be targeted for this vulnerability.
4.4$0-$5k0.00

Summaryinfo

A vulnerability classified as problematic has been found in Linux Kernel up to 6.8.2. Affected by this vulnerability is the function free_swap_and_cache/swapoff. The manipulation leads to race condition. This vulnerability is referenced as CVE-2024-26960. No exploit is available. It is recommended to upgrade the affected component.

Detailsinfo

A vulnerability was found in Linux Kernel up to 6.8.2 and classified as problematic. This issue affects the function free_swap_and_cache/swapoff. The manipulation with an unknown input leads to a race condition vulnerability. Using CWE to declare the problem leads to CWE-362. The product contains a code sequence that can run concurrently with other code, and the code sequence requires temporary, exclusive access to a shared resource, but a timing window exists in which the shared resource can be modified by another code sequence that is operating concurrently. The impact remains unknown. The summary by CVE is:

In the Linux kernel, the following vulnerability has been resolved: mm: swap: fix race between free_swap_and_cache() and swapoff() 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. This is a theoretical problem and I haven'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). 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't present in get_swap_device() because it doesn't make sense in general due to the race between getting the reference and swapoff. So I've added an equivalent check directly in free_swap_and_cache(). Details of how to provoke one possible issue (thanks to David Hildenbrand for deriving this): --8<----- __swap_entry_free() might be the last user and result in "count == SWAP_HAS_CACHE". swapoff->try_to_unuse() will stop as soon as soon as si->inuse_pages==0. So the question is: could someone reclaim the folio and turn si->inuse_pages==0, before we completed swap_page_trans_huge_swapped(). Imagine the following: 2 MiB folio in the swapcache. Only 2 subpages are still references by swap entries. Process 1 still references subpage 0 via swap entry. Process 2 still references subpage 1 via swap entry. Process 1 quits. Calls free_swap_and_cache(). -> count == SWAP_HAS_CACHE [then, preempted in the hypervisor etc.] Process 2 quits. Calls free_swap_and_cache(). -> count == SWAP_HAS_CACHE Process 2 goes ahead, passes swap_page_trans_huge_swapped(), and calls __try_to_reclaim_swap(). __try_to_reclaim_swap()->folio_free_swap()->delete_from_swap_cache()-> put_swap_folio()->free_swap_slot()->swapcache_free_entries()-> swap_entry_free()->swap_range_free()-> ... WRITE_ONCE(si->inuse_pages, si->inuse_pages - nr_entries); What stops swapoff to succeed after process 2 reclaimed the swap cache but before process1 finished its call to swap_page_trans_huge_swapped()? --8<-----

The advisory is shared at git.kernel.org. The identification of this vulnerability is CVE-2024-26960 since 02/19/2024. The exploitation is known to be difficult. Technical details are known, but no exploit is available.

The vulnerability scanner Nessus provides a plugin with the ID 209060 (Ubuntu 16.04 LTS / 18.04 LTS : Linux kernel vulnerabilities (USN-7069-1)), which helps to determine the existence of the flaw in a target environment.

Upgrading to version 5.10.215, 5.15.154, 6.1.84, 6.6.24, 6.7.12, 6.8.3 or 6.9-rc1 eliminates this vulnerability. Applying the patch d85c11c97ecf/2da5568ee222/1ede7f1d7eed/0f98f6d2fb5f/3ce4c4c653e4/363d17e7f790/82b1c07a0af6 is able to eliminate this problem. The bugfix is ready for download at git.kernel.org. The best possible mitigation is suggested to be upgrading to the latest version.

The vulnerability is also documented in the databases at Tenable (209060) and CERT Bund (WID-SEC-2024-1008). Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Affected

  • Debian Linux
  • Amazon Linux 2
  • Red Hat Enterprise Linux
  • Ubuntu Linux
  • SUSE Linux
  • Oracle Linux
  • Oracle VM
  • EMC Avamar
  • IBM QRadar SIEM
  • Dell NetWorker
  • IBM Security Guardium
  • RESF Rocky Linux
  • Broadcom Brocade SANnav
  • Open Source Linux Kernel
  • IBM Business Automation Workflow
  • IBM Spectrum Protect Plus
  • Dell Avamar
  • Juniper Junos Space
  • IBM DataPower Gateway
  • IBM Storage Scale System
  • SolarWinds Security Event Manager
  • Dell PowerProtect Data Domain
  • Dell PowerScale OneFS

Productinfo

Type

Vendor

Name

Version

License

Website

CPE 2.3info

CPE 2.2info

CVSSv4info

VulDB Vector: 🔍
VulDB Reliability: 🔍

CVSSv3info

VulDB Meta Base Score: 4.6
VulDB Meta Temp Score: 4.4

VulDB Base Score: 4.6
VulDB Temp Score: 4.4
VulDB Vector: 🔍
VulDB Reliability: 🔍

CVSSv2info

AVACAuCIA
💳💳💳💳💳💳
💳💳💳💳💳💳
💳💳💳💳💳💳
VectorComplexityAuthenticationConfidentialityIntegrityAvailability
UnlockUnlockUnlockUnlockUnlockUnlock
UnlockUnlockUnlockUnlockUnlockUnlock
UnlockUnlockUnlockUnlockUnlockUnlock

VulDB Base Score: 🔍
VulDB Temp Score: 🔍
VulDB Reliability: 🔍

Exploitinginfo

Class: Race condition
CWE: CWE-362
CAPEC: 🔍
ATT&CK: 🔍

Physical: No
Local: No
Remote: Partially

Availability: 🔍
Status: Not defined

EPSS Score: 🔍
EPSS Percentile: 🔍

Price Prediction: 🔍
Current Price Estimation: 🔍

0-DayUnlockUnlockUnlockUnlock
TodayUnlockUnlockUnlockUnlock

Nessus ID: 209060
Nessus Name: Ubuntu 16.04 LTS / 18.04 LTS : Linux kernel vulnerabilities (USN-7069-1)

Threat Intelligenceinfo

Interest: 🔍
Active Actors: 🔍
Active APT Groups: 🔍

Countermeasuresinfo

Recommended: Upgrade
Status: 🔍

0-Day Time: 🔍

Upgrade: Kernel 5.10.215/5.15.154/6.1.84/6.6.24/6.7.12/6.8.3/6.9-rc1
Patch: d85c11c97ecf/2da5568ee222/1ede7f1d7eed/0f98f6d2fb5f/3ce4c4c653e4/363d17e7f790/82b1c07a0af6

Timelineinfo

02/19/2024 🔍
05/01/2024 +71 days 🔍
05/01/2024 +0 days 🔍
01/26/2026 +635 days 🔍

Sourcesinfo

Vendor: kernel.org

Advisory: git.kernel.org
Status: Confirmed

CVE: CVE-2024-26960 (🔍)
GCVE (CVE): GCVE-0-2024-26960
GCVE (VulDB): GCVE-100-262625
CERT Bund: WID-SEC-2024-1008 - Linux Kernel: Mehrere Schwachstellen erm&ouml;glichen Denial of Service

Entryinfo

Created: 05/01/2024 08:19
Updated: 01/26/2026 20:53
Changes: 05/01/2024 08:19 (56), 10/16/2024 18:19 (3), 03/21/2025 02:24 (1), 08/02/2025 22:56 (7), 11/10/2025 16:26 (1), 01/26/2026 20:53 (1)
Complete: 🔍
Cache ID: 216::103

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Discussion

No comments yet. Languages: en.

Please log in to comment.

Want to stay up to date on a daily basis?

Enable the mail alert feature now!