Cloudanix VulnDB

CVE-2026-46279

High · 7.8

CVSS

7.8

EPSS

0.2%

Published

Jun 8, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

Some Linux systems using uncommon debug memory settings may crash or become unstable because the kernel mishandles early memory tracking during startup.

Exploitation
Local Privilege
Attacker needs
Local User
Complexity
Theoretical
Impact
Denial Of Service
Component
OS kernel
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Medium

What it actually does

This Linux kernel flaw is an initialization-ordering bug in the memory-allocation profiling path. Pages allocated and freed before page_ext initialization can retain an uninitialized allocation codetag; when those pages are later freed, especially through KASAN-related paths, the kernel can emit a warning such as "alloc_tag was not set" from __pgalloc_tag_sub(). The issue is primarily observable when CONFIG_MEM_ALLOC_PROFILING_DEBUG is enabled and mem_profiling_compressed is disabled. The practical impact is a kernel warning and potential denial-of-service behavior if the system is configured to treat kernel warnings as fatal, such as with panic_on_warn.

Why it matters to the business

For most production Linux systems this is likely low risk because it depends on uncommon debug/profiling kernel configuration and has no known public exploit maturity, is not listed in CISA KEV, is not associated with ransomware use, and has a low EPSS score. Organizations running custom, debug, test, CI, fuzzing, or hardened kernels that panic on kernel warnings could experience boot-time or early-runtime instability, failed test runs, host crashes, or reduced availability.

How an attack unfolds

There is no evidence of a practical remote exploitation path or active exploitation. The condition arises during early kernel boot because page_ext is initialized after some pages may already have been allocated and freed. If memory allocation profiling debug support is enabled and compressed memory profiling is disabled, those early pages may later be reclaimed through KASAN/quarantine or slab-allocation paths. When the kernel attempts to subtract accounting from a page whose allocation codetag was never set, it emits a warning. An attacker would generally need local code execution or control over workloads that influence memory allocation/free patterns, and meaningful denial of service would typically require the host to be configured to panic on kernel warnings.

How to fix it

Upgrade to a Linux kernel version that includes the upstream fix for mm/alloc_tag page codetag initialization during early boot. If vendor fixed package versions are not available, obtain the fix from the relevant Linux distribution or kernel vendor advisory once published. As mitigations, avoid using affected debug/profiling kernel configurations in production, disable CONFIG_MEM_ALLOC_PROFILING_DEBUG where it is not required, enable the corrected memory profiling behavior where applicable, and avoid panic_on_warn on systems where kernel warnings should not cause availability loss. For systems used in kernel development, fuzzing, or CI, prioritize applying the patch to reduce false-positive instability and test interruption.

How to confirm the fix worked

Confirm the running kernel includes the fix by checking the distribution/vendor changelog or kernel source for the mm/alloc_tag change that tracks pages allocated before page_ext initialization and clears their codetag after page_ext setup completes. Verify runtime exposure by reviewing the kernel configuration for CONFIG_MEM_ALLOC_PROFILING_DEBUG and relevant memory profiling settings. Reboot a patched test system with the same configuration and confirm that dmesg, journalctl -k, or kernel ring buffer logs no longer show "alloc_tag was not set" warnings from __pgalloc_tag_sub(), __free_frozen_pages(), qlist_free_all(), or kasan_quarantine_reduce during boot or early workload execution.

Typical attack path

  1. Identify a Linux system running an affected kernel build with CONFIG_MEM_ALLOC_PROFILING_DEBUG enabled and mem_profiling_compressed disabled.
  2. Confirm that kernel warning behavior is security-impacting, for example panic_on_warn is enabled or kernel warnings disrupt workload health checks.
  3. Trigger memory allocation and free activity that causes pages allocated before page_ext initialization to be reclaimed through KASAN/slab paths.
  4. Cause the kernel to hit the uninitialized allocation codetag path and emit the "alloc_tag was not set" warning.
  5. If the system panics on warnings, convert the warning into a denial of service by crashing or rebooting the host.

How to detect it

Look for prior exploitation or manifestation in kernel logs rather than conventional intrusion artifacts. Relevant sources include dmesg output, /var/log/kern.log, /var/log/messages, systemd journal kernel logs via journalctl -k, crash dumps, kdump/vmcore analysis, and CI/fuzzing console logs. Search for the warning text "alloc_tag was not set" and stack traces involving __pgalloc_tag_sub, __free_frozen_pages, qlist_free_all, kasan_quarantine_reduce, and kmem_cache_alloc_noprof. Correlate events with boot time, early service startup, kernel panic/reboot events, panic_on_warn settings, and systems running debug memory profiling or KASAN-enabled kernels. Because there are no known threat actors or public exploit maturity for this CVE, treat matches as exposure or triggering evidence first, then investigate whether any local workload intentionally caused repeated memory pressure immediately before crashes.

  • alloc_tag was not set
  • WARNING: ./include/linux/alloc_tag.h:164
  • __pgalloc_tag_sub
  • __free_frozen_pages
  • qlist_free_all
  • kasan_quarantine_reduce
  • __kasan_slab_alloc
  • kmem_cache_alloc_noprof
  • CONFIG_MEM_ALLOC_PROFILING_DEBUG=Y
  • mem_profiling_compressed disabled
  • panic_on_warn
  • ------------[ cut here ]------------

What your security team should do

  • Inventory Linux systems using custom, debug, CI, fuzzing, or hardened kernels, especially those with CONFIG_MEM_ALLOC_PROFILING_DEBUG enabled.
  • Prioritize patching systems that combine affected debug memory-allocation profiling options with panic_on_warn or other policies that turn kernel warnings into crashes.
  • Monitor vendor kernel advisories and apply the fixed kernel package when available; where package versions are not yet published, track the upstream mm/alloc_tag fix.
  • For production systems, avoid running debug kernel configurations unless operationally required.
  • Add monitoring for the specific kernel warning strings so affected hosts can be identified before warnings become availability incidents.
  • Review boot and kernel logs on development and test fleets for recurrence after patching.

The record

In the Linux kernel, the following vulnerability has been resolved: mm/alloc_tag: clear codetag for pages allocated before page_ext initialization Due to initialization ordering, page_ext is allocated and initialized relatively late during boot. Some pages have already been allocated and freed before page_ext becomes available, leaving their codetag uninitialized. A clear example is in init_section_page_ext(): alloc_page_ext() calls kmemleak_alloc(). If the slab cache has no free objects, it falls back to the buddy allocator to allocate memory. However, at this point page_ext is not yet fully initialized, so these newly allocated pages have no codetag set. These pages may later be reclaimed by KASAN, which causes the warning to trigger when they are freed because their codetag ref is still empty. Use a global array to track pages allocated before page_ext is fully initialized. The array size is fixed at 8192 entries, and will emit a warning if this limit is exceeded. When page_ext initialization completes, set their codetag to empty to avoid warnings when they are freed later. This warning is only observed with CONFIG_MEM_ALLOC_PROFILING_DEBUG=Y and mem_profiling_compressed disabled: [ 9.582133] ------------[ cut here ]------------ [ 9.582137] alloc_tag was not set [ 9.582139] WARNING: ./include/linux/alloc_tag.h:164 at __pgalloc_tag_sub+0x40f/0x550, CPU#5: systemd/1 [ 9.582190] CPU: 5 UID: 0 PID: 1 Comm: systemd Not tainted 7.0.0-rc4 #1 PREEMPT(lazy) [ 9.582192] Hardware name: Red Hat KVM, BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014 [ 9.582194] RIP: 0010:__pgalloc_tag_sub+0x40f/0x550 [ 9.582196] Code: 00 00 4c 29 e5 48 8b 05 1f 88 56 05 48 8d 4c ad 00 48 8d 2c c8 e9 87 fd ff ff 0f 0b 0f 0b e9 f3 fe ff ff 48 8d 3d 61 2f ed 03 <67> 48 0f b9 3a e9 b3 fd ff ff 0f 0b eb e4 e8 5e cd 14 02 4c 89 c7 [ 9.582197] RSP: 0018:ffffc9000001f940 EFLAGS: 00010246 [ 9.582200] RAX: dffffc0000000000 RBX: 1ffff92000003f2b RCX: 1ffff110200d806c [ 9.582201] RDX: ffff8881006c0360 RSI: 0000000000000004 RDI: ffffffff9bc7b460 [ 9.582202] RBP: 0000000000000000 R08: 0000000000000000 R09: fffffbfff3a62324 [ 9.582203] R10: ffffffff9d311923 R11: 0000000000000000 R12: ffffea0004001b00 [ 9.582204] R13: 0000000000002000 R14: ffffea0000000000 R15: ffff8881006c0360 [ 9.582206] FS: 00007ffbbcf2d940(0000) GS:ffff888450479000(0000) knlGS:0000000000000000 [ 9.582208] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 9.582210] CR2: 000055ee3aa260d0 CR3: 0000000148b67005 CR4: 0000000000770ef0 [ 9.582211] PKRU: 55555554 [ 9.582212] Call Trace: [ 9.582213] <TASK> [ 9.582214] ? __pfx___pgalloc_tag_sub+0x10/0x10 [ 9.582216] ? check_bytes_and_report+0x68/0x140 [ 9.582219] __free_frozen_pages+0x2e4/0x1150 [ 9.582221] ? __free_slab+0xc2/0x2b0 [ 9.582224] qlist_free_all+0x4c/0xf0 [ 9.582227] kasan_quarantine_reduce+0x15d/0x180 [ 9.582229] __kasan_slab_alloc+0x69/0x90 [ 9.582232] kmem_cache_alloc_noprof+0x14a/0x500 [ 9.582234] do_getname+0x96/0x310 [ 9.582237] do_readlinkat+0x91/0x2f0 [ 9.582239] ? __pfx_do_readlinkat+0x10/0x10 [ 9.582240] ? get_random_bytes_user+0x1df/0x2c0 [ 9.582244] __x64_sys_readlinkat+0x96/0x100 [ 9.582246] do_syscall_64+0xce/0x650 [ 9.582250] ? __x64_sys_getrandom+0x13a/0x1e0 [ 9.582252] ? __pfx___x64_sys_getrandom+0x10/0x10 [ 9.582254] ? do_syscall_64+0x114/0x650 [ 9.582255] ? ksys_read+0xfc/0x1d0 [ 9.582258] ? __pfx_ksys_read+0x10/0x10 [ 9.582260] ? do_syscall_64+0x114/0x650 [ 9.582262] ? do_syscall_64+0x114/0x650 [ 9.582264] ? __pfx_fput_close_sync+0x10/0x10 [ 9.582266] ? file_close_fd_locked+0x178/0x2a0 [ 9.582268] ? __x64_sys_faccessat2+0x96/0x100 [ 9.582269] ? __x64_sys_close+0x7d/0xd0 [ 9.582271] ? do_syscall_64+0x114/0x650 [ 9.582273] ? do_syscall_64+0x114/0x650 [ 9.582275] ? clear_bhb_loop+0x50/0xa0 [ 9.582277] ? clear_bhb_l ---truncated---

Affected packages

Ecosystem Package Introduced Fixed
openSUSE:Tumbleweed kernel-source 0 7.0.12-1.1

Related vulnerabilities