CVE-2026-63827

apparmor: fix use-after-free in rawdata dedup loop

CVE-2026-63827 is fixed in 17 products on 1 platform, first by DEBIAN-CVE-2026-63827, released July 20, 2026. It is not reported as exploited. Patch Radar priority: Urgent.

Urgent
CVSS
9.8
Critical
Exploitation
None reported
No vendor assessment
CISA KEV
Not listed
Not in the Known Exploited Vulnerabilities catalog
EPSS
0.0012
2nd percentile

In the Linux kernel, the following vulnerability has been resolved: apparmor: fix use-after-free in rawdata dedup loop aa_replace_profiles() walks ns->rawdata_list to dedup the incoming policy blob against entries already attached to existing profiles. Per the kernel-doc on struct aa_loaddata, list membership does not hold a reference: profiles hold pcount, and when the last pcount drops, do_ploaddata_rmfs() is queued on a workqueue that takes ns->lock and removes the entry. Between dropping the last pcount and the workqueue running, an entry remains on the list with pcount == 0. aa_get_profile_loaddata() is an unconditional kref_get() on pcount, so when the dedup loop hits such an entry, refcount hardening reports refcount_t: addition on 0; use-after-free. inside aa_replace_profiles(), and the poisoned counter then trips "saturated" and "underflow" warnings on the subsequent uses of the same loaddata. Before commit a0b7091c4de4 ("apparmor: fix race on rawdata dereference") the dedup path used a get_unless_zero-style helper on a single counter, so the existing "if (tmp)" guard was meaningful. The split-refcount refactor introduced aa_get_profile_loaddata(), which has plain kref_get() semantics, and the guard quietly became a no-op. Introduce aa_get_profile_loaddata_not0(), matching the existing _not0 convention used by aa_get_profile_not0(), and use it for the rawdata_list dedup lookup so dying entries are skipped. Reproduced on x86_64 with v7.1-rc5 in QEMU+KVM running Ubuntu 24.04 + stress-ng 0.17.06: stress-ng --apparmor 1 --klog-check --timeout 60s Without this patch the three refcount_t warnings fire within a few seconds. With it the same 60 s run is clean. Coverage is a smoke-test only; a longer soak with CONFIG_KASAN, CONFIG_KCSAN and CONFIG_PROVE_LOCKING would be welcome from anyone with the cycles.

Where it's fixed

ProductFixed inFixReleased
Linux
dtb-aarch64 · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-64kb · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-64kb · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-64kb · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-azure · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-azure · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-azure · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-default · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-default · sles 15.6 6.4.0-150600.23.135.1 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-default · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-default · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23237-1 Aug 11, 2026
kernel-default-base · opensuse-leap 16.0 6.12.0-160000.37.1.160000.2.19 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-default-base · sles 15.6 6.4.0-150600.23.135.1.150600.12.62.4 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-default-base · sles 15.7 6.4.0-150700.53.81.1.150700.17.45.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-default-base · sles 16.0 6.12.0-160000.37.1.160000.2.19 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-docs · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-docs · sles 15.6 6.4.0-150600.23.135.1 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-docs · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-docs · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-kvmsmall · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-kvmsmall · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-livepatch-SLE15-SP6_Update_31 · sles 15.6 1-150600.13.3.4 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-livepatch-SLE15-SP7-RT_Update_20 · sles 15.7 1-150700.1.3.1 SUSE-SU-2026:4120-1 Sep 10, 2026
kernel-livepatch-SLE15-SP7_Update_21 · sles 15.7 1-150700.15.3.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-obs-build · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-obs-build · sles 15.6 6.4.0-150600.23.135.1 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-obs-build · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-obs-qa · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-obs-qa · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-rt · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-source · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-source · sles 15.6 6.4.0-150600.23.135.1 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-source · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-source · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-syms · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-syms · sles 15.6 6.4.0-150600.23.135.1 SUSE-SU-2026:4369-1 Oct 2, 2026
kernel-syms · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-syms · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
kernel-zfcpdump · opensuse-leap 16.0 6.12.0-160000.37.1 OPENSUSE-SU-2026:21555-1 Aug 12, 2026
kernel-zfcpdump · sles 15.7 6.4.0-150700.53.81.1 SUSE-SU-2026:4254-1 Oct 7, 2026
kernel-zfcpdump · sles 16.0 6.12.0-160000.37.1 SUSE-SU-2026:23231-1 Aug 11, 2026
linux · Debian 12.15 (bookworm) 6.1.177-1 DEBIAN-CVE-2026-63827 Jul 20, 2026
linux · Debian 13.5 (trixie) 6.12.95-1 DEBIAN-CVE-2026-63827 Jul 20, 2026
linux · Debian 14 7.1.3-1 DEBIAN-CVE-2026-63827 Jul 20, 2026

Patch Radar data is free to use with attribution. Terms and how to credit it.

Product names, logos and trademarks shown on Patch Radar belong to their respective owners. They are used only to identify the software each security fix applies to and to help readers find their platform. Their use does not imply any affiliation with, or endorsement by, those owners, and Patchblox is not affiliated with any of them.