Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

CVE-2026-63827

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
19/07/2026
Última modificación:
19/07/2026

Descripción

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

Impacto