CVE-2026-46328
Description
Linux kernel's AppArmor subsystem had a flaw in how it handled POSIX CPU timers, potentially affecting resource limits.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Linux kernel's AppArmor subsystem had a flaw in how it handled POSIX CPU timers, potentially affecting resource limits.
Vulnerability
The Linux kernel's AppArmor subsystem contained a flaw in its handling of resource limits for POSIX CPU timers. The vulnerability arises because setting the resource limit (rlimit) for POSIX CPU timers requires an additional step beyond the standard rlimit setting. The code was refactored to clarify when limits are set and to conditionally update POSIX CPU timers when appropriate.
Exploitation
Exploitation of this vulnerability is not detailed in the available references. However, it is implied that an attacker with the ability to manipulate resource limits within the AppArmor context could potentially trigger this issue.
Impact
The impact of this vulnerability is not explicitly detailed in the available references. However, a successful exploit could potentially lead to incorrect resource allocation or denial of service related to POSIX CPU timers within the affected Linux kernel versions.
Mitigation
This vulnerability has been resolved in the Linux kernel. The specific fixed version and release date are not provided in the available references. No workarounds are disclosed, and the vulnerability is not listed as actively exploited.
AI Insight generated on Jun 9, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
1Patches
166ca56813f4a5apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
e43818b16815apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index dcc94c3153d51..a7eee815f1215 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -201,6 +201,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
9bf1fa150775apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
e1cc11550b2fapparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
2232d7cd2438apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
28aa93fcfb33apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
1f736dfe27c8apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index dcc94c3153d51..a7eee815f1215 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -201,6 +201,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
57d51d41b90eapparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
57d51d41b90eapparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
e43818b16815apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index dcc94c3153d51..a7eee815f1215 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -201,6 +201,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
1f736dfe27c8apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index dcc94c3153d51..a7eee815f1215 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -201,6 +201,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
2232d7cd2438apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
28aa93fcfb33apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
e1cc11550b2fapparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 1ae4874251a96..f94e416399441 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -182,6 +182,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) new->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
6ca56813f4a5apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
9bf1fa150775apparmor: fix rlimit for posix cpu timers
1 file changed · +5 −1
security/apparmor/resource.c+5 −1 modifieddiff --git a/security/apparmor/resource.c b/security/apparmor/resource.c index 8e80db3ae21c0..64212b39ba4bb 100644 --- a/security/apparmor/resource.c +++ b/security/apparmor/resource.c @@ -196,6 +196,11 @@ void __aa_transition_rlimits(struct aa_label *old_l, struct aa_label *new_l) rules->rlimits.limits[j].rlim_max); /* soft limit should not exceed hard limit */ rlim->rlim_cur = min(rlim->rlim_cur, rlim->rlim_max); + if (j == RLIMIT_CPU && + rlim->rlim_cur != RLIM_INFINITY && + IS_ENABLED(CONFIG_POSIX_TIMERS)) + (void) update_rlimit_cpu(current->group_leader, + rlim->rlim_cur); } } } -- cgit 1.3-korg
Vulnerability mechanics
No source-code context for this CVE — mechanics is only generated when we can read the actual fix diff. Without that, the four sections (root cause, attack vector, affected code, fix) would be speculation rather than analysis.
References
8- git.kernel.org/stable/c/1f736dfe27c857b78f8461cd7c3dd9640be74b37nvd
- git.kernel.org/stable/c/2232d7cd243833ad750cae656d1817fe43744a09nvd
- git.kernel.org/stable/c/28aa93fcfb33b6d580c5df4ae8b6d13fb0e6fcd3nvd
- git.kernel.org/stable/c/57d51d41b90eface809b72e0e009b50546492f1fnvd
- git.kernel.org/stable/c/6ca56813f4a589f536adceb42882855d91fb1125nvd
- git.kernel.org/stable/c/9bf1fa150775b0c6b794e4b6a2c0395e13777999nvd
- git.kernel.org/stable/c/e1cc11550b2f66687a374536c9dfdddcefca0efenvd
- git.kernel.org/stable/c/e43818b16815c0c2bf933ef28316f8e704e5e0efnvd
News mentions
1- Linux Kernel: 25 Vulnerabilities Disclosed in Single Batch on June 8-9, 2026Vypr Intelligence · Jun 9, 2026