CVE-2024-35872 (GCVE-0-2024-35872)

Vulnerability from cvelistv5 – Published: 2024-05-19 08:34 – Updated: 2026-08-05 11:30
VLAI
Title
mm/secretmem: fix GUP-fast succeeding on secretmem folios
Summary
In the Linux kernel, the following vulnerability has been resolved: mm/secretmem: fix GUP-fast succeeding on secretmem folios folio_is_secretmem() currently relies on secretmem folios being LRU folios, to save some cycles. However, folios might reside in a folio batch without the LRU flag set, or temporarily have their LRU flag cleared. Consequently, the LRU flag is unreliable for this purpose. In particular, this is the case when secretmem_fault() allocates a fresh page and calls filemap_add_folio()->folio_add_lru(). The folio might be added to the per-cpu folio batch and won't get the LRU flag set until the batch was drained using e.g., lru_add_drain(). Consequently, folio_is_secretmem() might not detect secretmem folios and GUP-fast can succeed in grabbing a secretmem folio, crashing the kernel when we would later try reading/writing to the folio, because the folio has been unmapped from the directmap. Fix it by removing that unreliable check.
SSVC
Exploitation: none Automatable: no Technical Impact: partial
CISA Coordinator (v2.0.3)
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 , < 6564b014af92b677c1f07c44d7f5b595d589cf6e (git)
Affected: 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 , < 9c2b4b657739ecda38e3b383354a29566955ac48 (git)
Affected: 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 , < 43fad1d0284de30159661d0badfc3cbaf7e6f8f8 (git)
Affected: 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 , < 201e4aaf405dfd1308da54448654053004c579b5 (git)
Affected: 1507f51255c9ff07d75909a84e7c0d7f3c4b2f49 , < 65291dcfcf8936e1b23cfd7718fdfde7cfaf7706 (git)
Create a notification for this product.
Linux Linux Affected: 5.14
Unaffected: 0 , < 5.14 (semver)
Unaffected: 5.15.154 , ≤ 5.15.* (semver)
Unaffected: 6.1.85 , ≤ 6.1.* (semver)
Unaffected: 6.6.26 , ≤ 6.6.* (semver)
Unaffected: 6.8.5 , ≤ 6.8.* (semver)
Unaffected: 6.9 , ≤ * (original_commit_for_fix)
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-35872",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-05-20T15:13:36.224766Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-06-04T17:34:09.055Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      },
      {
        "providerMetadata": {
          "dateUpdated": "2024-08-02T03:21:48.571Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/linux/secretmem.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6564b014af92b677c1f07c44d7f5b595d589cf6e",
              "status": "affected",
              "version": "1507f51255c9ff07d75909a84e7c0d7f3c4b2f49",
              "versionType": "git"
            },
            {
              "lessThan": "9c2b4b657739ecda38e3b383354a29566955ac48",
              "status": "affected",
              "version": "1507f51255c9ff07d75909a84e7c0d7f3c4b2f49",
              "versionType": "git"
            },
            {
              "lessThan": "43fad1d0284de30159661d0badfc3cbaf7e6f8f8",
              "status": "affected",
              "version": "1507f51255c9ff07d75909a84e7c0d7f3c4b2f49",
              "versionType": "git"
            },
            {
              "lessThan": "201e4aaf405dfd1308da54448654053004c579b5",
              "status": "affected",
              "version": "1507f51255c9ff07d75909a84e7c0d7f3c4b2f49",
              "versionType": "git"
            },
            {
              "lessThan": "65291dcfcf8936e1b23cfd7718fdfde7cfaf7706",
              "status": "affected",
              "version": "1507f51255c9ff07d75909a84e7c0d7f3c4b2f49",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/linux/secretmem.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.14"
            },
            {
              "lessThan": "5.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.154",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.85",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.26",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.8.*",
              "status": "unaffected",
              "version": "6.8.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.9",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.154",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.85",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.26",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.8.5",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.9",
                  "versionStartIncluding": "5.14",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmm/secretmem: fix GUP-fast succeeding on secretmem folios\n\nfolio_is_secretmem() currently relies on secretmem folios being LRU\nfolios, to save some cycles.\n\nHowever, folios might reside in a folio batch without the LRU flag set, or\ntemporarily have their LRU flag cleared.  Consequently, the LRU flag is\nunreliable for this purpose.\n\nIn particular, this is the case when secretmem_fault() allocates a fresh\npage and calls filemap_add_folio()-\u003efolio_add_lru().  The folio might be\nadded to the per-cpu folio batch and won\u0027t get the LRU flag set until the\nbatch was drained using e.g., lru_add_drain().\n\nConsequently, folio_is_secretmem() might not detect secretmem folios and\nGUP-fast can succeed in grabbing a secretmem folio, crashing the kernel\nwhen we would later try reading/writing to the folio, because the folio\nhas been unmapped from the directmap.\n\nFix it by removing that unreliable check."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The whole path is local syscalls \u2014 `memfd_secret(2)`, `mmap(2)` to fault the folio into the per-CPU batch, then any GUP-fast consumer such as `vmsplice(2)`, O_DIRECT, or io_uring buffer registration. No remote peer data reaches `folio_is_secretmem()`.\nAC:L - The window is not a race the attacker must win but a state the attacker creates: faulting a fresh secretmem page deterministically leaves it in the per-CPU folio batch without `PG_lru`, and the immediately following GUP-fast call on the same CPU always sees the stale flag \u2014 the upstream selftest reproduces it every run, with unlimited retries available.\nPR:L - Only an unprivileged local account is needed: `memfd_secret(2)` performs no capability check, `CONFIG_SECRETMEM` is `default y` on x86/arm64/riscv, and `secretmem.enable` defaults to 1 since v6.5, with `secretmem_mmap()` needing only default RLIMIT_MEMLOCK headroom for a single page.\nUI:N - The attacking process performs every step itself \u2014 create the fd, fault the page, invoke the GUP-fast consumer. No victim action, mount, or file open is involved.\nS:U - The bypassed check and the resulting oops/exposure are both inside the kernel\u0027s own memory-management authority; there is no VM, IOMMU, or sandbox boundary crossed.\nC:H - It defeats secretmem\u0027s core confidentiality guarantee \u2014 pages deliberately removed from the kernel direct map become pinnable and reachable by kernel subsystems and DMA engines (splice\u2192socket, O_DIRECT, and even read-only longterm pins passed in the vulnerable tree), so key material secretmem exists to keep out of kernel reach can be read out to a file or the wire, and the resulting oops additionally dumps kernel addresses and stack state.\nI:H - The same bypass works with `FOLL_WRITE`, letting kernel copies and device DMA write into memory the design guarantees is unwritable from kernel context and corrupt the protected secret; the unhandled kernel fault also aborts operations mid-way, leaving pinned folios and held mm/pipe/filesystem locks behind.\nA:H - Any subsequent CPU access to the pinned folio through the cleared direct-map entry is an unhandled kernel page fault \u2014 `page_fault_oops()` in process context, and a fatal `Fatal exception in interrupt` panic when it lands in softirq (e.g. skb copy after splice to a socket) \u2014 and an unprivileged user can trigger it on demand and repeatedly."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:30:33.747Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e"
        },
        {
          "url": "https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48"
        },
        {
          "url": "https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8"
        },
        {
          "url": "https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5"
        },
        {
          "url": "https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706"
        }
      ],
      "title": "mm/secretmem: fix GUP-fast succeeding on secretmem folios",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-35872",
    "datePublished": "2024-05-19T08:34:30.096Z",
    "dateReserved": "2024-05-17T13:50:33.108Z",
    "dateUpdated": "2026-08-05T11:30:33.747Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2024-35872",
      "date": "2026-08-08",
      "epss": "0.00234",
      "percentile": "0.14317"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2024-35872\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-05-19T09:15:08.600\",\"lastModified\":\"2026-06-17T07:35:36.387\",\"vulnStatus\":\"Analyzed\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nmm/secretmem: fix GUP-fast succeeding on secretmem folios\\n\\nfolio_is_secretmem() currently relies on secretmem folios being LRU\\nfolios, to save some cycles.\\n\\nHowever, folios might reside in a folio batch without the LRU flag set, or\\ntemporarily have their LRU flag cleared.  Consequently, the LRU flag is\\nunreliable for this purpose.\\n\\nIn particular, this is the case when secretmem_fault() allocates a fresh\\npage and calls filemap_add_folio()-\u003efolio_add_lru().  The folio might be\\nadded to the per-cpu folio batch and won\u0027t get the LRU flag set until the\\nbatch was drained using e.g., lru_add_drain().\\n\\nConsequently, folio_is_secretmem() might not detect secretmem folios and\\nGUP-fast can succeed in grabbing a secretmem folio, crashing the kernel\\nwhen we would later try reading/writing to the folio, because the folio\\nhas been unmapped from the directmap.\\n\\nFix it by removing that unreliable check.\"},{\"lang\":\"es\",\"value\":\" En el kernel de Linux, se resolvi\u00f3 la siguiente vulnerabilidad: mm/secretmem: corrige el \u00e9xito r\u00e1pido de GUP en folios secretmem folio_is_secretmem() actualmente depende de que los folios secretmem sean folios LRU, para guardar algunos ciclos. Sin embargo, las publicaciones pueden residir en un lote de publicaciones sin el indicador LRU establecido o tener su indicador LRU borrado temporalmente. En consecuencia, la bandera LRU no es fiable para este fin. En particular, este es el caso cuando secretmem_fault() asigna una p\u00e1gina nueva y llama a filemap_add_folio()-\u0026gt;folio_add_lru(). La publicaci\u00f3n podr\u00eda agregarse al lote de publicaciones por CPU y no se establecer\u00e1 el indicador LRU hasta que el lote se drene usando, por ejemplo, lru_add_drain(). En consecuencia, es posible que folio_is_secretmem() no detecte folios secretmem y GUP-fast puede lograr capturar un folio secretmem, bloqueando el kernel cuando m\u00e1s tarde intentemos leer/escribir en el folio, porque el folio no se ha desasignado del mapa directo. Solucionarlo eliminando ese cheque poco confiable.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"include/linux/secretmem.h\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\",\"lessThan\":\"6564b014af92b677c1f07c44d7f5b595d589cf6e\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\",\"lessThan\":\"9c2b4b657739ecda38e3b383354a29566955ac48\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\",\"lessThan\":\"43fad1d0284de30159661d0badfc3cbaf7e6f8f8\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\",\"lessThan\":\"201e4aaf405dfd1308da54448654053004c579b5\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\",\"lessThan\":\"65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"include/linux/secretmem.h\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"5.14\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"5.14\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"5.15.154\",\"lessThanOrEqual\":\"5.15.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.1.85\",\"lessThanOrEqual\":\"6.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.26\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.8.5\",\"lessThanOrEqual\":\"6.8.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.9\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\",\"baseScore\":5.5,\"baseSeverity\":\"MEDIUM\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"NONE\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":3.6}],\"ssvcV203\":[{\"source\":\"134c704f-9b21-4f2e-91b3-4a467353bcc0\",\"ssvcData\":{\"timestamp\":\"2024-05-20T15:13:36.224766Z\",\"id\":\"CVE-2024-35872\",\"options\":[{\"exploitation\":\"none\"},{\"automatable\":\"no\"},{\"technicalImpact\":\"partial\"}],\"role\":\"CISA Coordinator\",\"version\":\"2.0.3\"}}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"NVD-CWE-noinfo\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.14\",\"versionEndExcluding\":\"5.15.154\",\"matchCriteriaId\":\"0290B9D4-539A-4C65-88D4-3A68FBF7F40B\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"5.16\",\"versionEndExcluding\":\"6.1.85\",\"matchCriteriaId\":\"325665BF-2409-49D9-B391-39AD4566FDBD\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.2\",\"versionEndExcluding\":\"6.6.26\",\"matchCriteriaId\":\"C520696A-A594-4FFC-A32D-12DA535CE911\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.7\",\"versionEndExcluding\":\"6.8.5\",\"matchCriteriaId\":\"DBD6C99E-4250-4DFE-8447-FF2075939D10\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"22BEDD49-2C6D-402D-9DBF-6646F6ECD10B\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"DF73CB2A-DFFD-46FB-9BFE-AA394F27EA37\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\",\"tags\":[\"Patch\"]}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-04T19:02:41+00:00",
      "cve": "CVE-2024-35872",
      "id": "CVE-2024-35872",
      "initial_release_date": "2024-05-19T00:00:00+00:00",
      "product_status:fixed": "280",
      "product_status:known_affected": "42",
      "product_status:known_not_affected": "78",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: mm/secretmem: fix GUP-fast succeeding on secretmem folios",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2024/cve-2024-35872.json",
      "version": "3"
    },
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CVE Program Container\", \"references\": [{\"url\": \"https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5\", \"tags\": [\"x_transferred\"]}, {\"url\": \"https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\", \"tags\": [\"x_transferred\"]}], \"providerMetadata\": {\"orgId\": \"af854a3a-2127-422b-91ae-364da2661108\", \"shortName\": \"CVE\", \"dateUpdated\": \"2024-08-02T03:21:48.571Z\"}}, {\"metrics\": [{\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2024-35872\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"partial\"}], \"version\": \"2.0.3\", \"timestamp\": \"2024-05-20T15:13:36.224766Z\"}}}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2024-05-23T19:01:24.962Z\"}, \"title\": \"CISA ADP Vulnrichment\"}], \"cna\": {\"title\": \"mm/secretmem: fix GUP-fast succeeding on secretmem folios\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 7.8, \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:L - The whole path is local syscalls \\u2014 `memfd_secret(2)`, `mmap(2)` to fault the folio into the per-CPU batch, then any GUP-fast consumer such as `vmsplice(2)`, O_DIRECT, or io_uring buffer registration. No remote peer data reaches `folio_is_secretmem()`.\\nAC:L - The window is not a race the attacker must win but a state the attacker creates: faulting a fresh secretmem page deterministically leaves it in the per-CPU folio batch without `PG_lru`, and the immediately following GUP-fast call on the same CPU always sees the stale flag \\u2014 the upstream selftest reproduces it every run, with unlimited retries available.\\nPR:L - Only an unprivileged local account is needed: `memfd_secret(2)` performs no capability check, `CONFIG_SECRETMEM` is `default y` on x86/arm64/riscv, and `secretmem.enable` defaults to 1 since v6.5, with `secretmem_mmap()` needing only default RLIMIT_MEMLOCK headroom for a single page.\\nUI:N - The attacking process performs every step itself \\u2014 create the fd, fault the page, invoke the GUP-fast consumer. No victim action, mount, or file open is involved.\\nS:U - The bypassed check and the resulting oops/exposure are both inside the kernel\u0027s own memory-management authority; there is no VM, IOMMU, or sandbox boundary crossed.\\nC:H - It defeats secretmem\u0027s core confidentiality guarantee \\u2014 pages deliberately removed from the kernel direct map become pinnable and reachable by kernel subsystems and DMA engines (splice\\u2192socket, O_DIRECT, and even read-only longterm pins passed in the vulnerable tree), so key material secretmem exists to keep out of kernel reach can be read out to a file or the wire, and the resulting oops additionally dumps kernel addresses and stack state.\\nI:H - The same bypass works with `FOLL_WRITE`, letting kernel copies and device DMA write into memory the design guarantees is unwritable from kernel context and corrupt the protected secret; the unhandled kernel fault also aborts operations mid-way, leaving pinned folios and held mm/pipe/filesystem locks behind.\\nA:H - Any subsequent CPU access to the pinned folio through the cleared direct-map entry is an unhandled kernel page fault \\u2014 `page_fault_oops()` in process context, and a fatal `Fatal exception in interrupt` panic when it lands in softirq (e.g. skb copy after splice to a socket) \\u2014 and an unprivileged user can trigger it on demand and repeatedly.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\", \"lessThan\": \"6564b014af92b677c1f07c44d7f5b595d589cf6e\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\", \"lessThan\": \"9c2b4b657739ecda38e3b383354a29566955ac48\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\", \"lessThan\": \"43fad1d0284de30159661d0badfc3cbaf7e6f8f8\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\", \"lessThan\": \"201e4aaf405dfd1308da54448654053004c579b5\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"1507f51255c9ff07d75909a84e7c0d7f3c4b2f49\", \"lessThan\": \"65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\", \"versionType\": \"git\"}], \"programFiles\": [\"include/linux/secretmem.h\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"5.14\"}, {\"status\": \"unaffected\", \"version\": \"0\", \"lessThan\": \"5.14\", \"versionType\": \"semver\"}, {\"status\": \"unaffected\", \"version\": \"5.15.154\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"5.15.*\"}, {\"status\": \"unaffected\", \"version\": \"6.1.85\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.1.*\"}, {\"status\": \"unaffected\", \"version\": \"6.6.26\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.6.*\"}, {\"status\": \"unaffected\", \"version\": \"6.8.5\", \"versionType\": \"semver\", \"lessThanOrEqual\": \"6.8.*\"}, {\"status\": \"unaffected\", \"version\": \"6.9\", \"versionType\": \"original_commit_for_fix\", \"lessThanOrEqual\": \"*\"}], \"programFiles\": [\"include/linux/secretmem.h\"], \"defaultStatus\": \"affected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/6564b014af92b677c1f07c44d7f5b595d589cf6e\"}, {\"url\": \"https://git.kernel.org/stable/c/9c2b4b657739ecda38e3b383354a29566955ac48\"}, {\"url\": \"https://git.kernel.org/stable/c/43fad1d0284de30159661d0badfc3cbaf7e6f8f8\"}, {\"url\": \"https://git.kernel.org/stable/c/201e4aaf405dfd1308da54448654053004c579b5\"}, {\"url\": \"https://git.kernel.org/stable/c/65291dcfcf8936e1b23cfd7718fdfde7cfaf7706\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nmm/secretmem: fix GUP-fast succeeding on secretmem folios\\n\\nfolio_is_secretmem() currently relies on secretmem folios being LRU\\nfolios, to save some cycles.\\n\\nHowever, folios might reside in a folio batch without the LRU flag set, or\\ntemporarily have their LRU flag cleared.  Consequently, the LRU flag is\\nunreliable for this purpose.\\n\\nIn particular, this is the case when secretmem_fault() allocates a fresh\\npage and calls filemap_add_folio()-\u003efolio_add_lru().  The folio might be\\nadded to the per-cpu folio batch and won\u0027t get the LRU flag set until the\\nbatch was drained using e.g., lru_add_drain().\\n\\nConsequently, folio_is_secretmem() might not detect secretmem folios and\\nGUP-fast can succeed in grabbing a secretmem folio, crashing the kernel\\nwhen we would later try reading/writing to the folio, because the folio\\nhas been unmapped from the directmap.\\n\\nFix it by removing that unreliable check.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"5.15.154\", \"versionStartIncluding\": \"5.14\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.1.85\", \"versionStartIncluding\": \"5.14\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.26\", \"versionStartIncluding\": \"5.14\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.8.5\", \"versionStartIncluding\": \"5.14\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.9\", \"versionStartIncluding\": \"5.14\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T11:30:33.747Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2024-35872\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-08-05T11:30:33.747Z\", \"dateReserved\": \"2024-05-17T13:50:33.108Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2024-05-19T08:34:30.096Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…