Public bug reported:

Summary

After upgrading linux-raspi from 7.0.0-1020.20 to 7.0.0-1023.23
(resolute-proposed), processes inside containers run by containerd under
its default AppArmor profile can no longer signal each other. On
Kubernetes nodes (containerd + runc, the default setup of RKE2/k3s and
most distributions) this breaks ordinary workloads as soon as the node
boots the new kernel:

  apparmor="DENIED" operation="signal" class="signal" 
profile="cri-containerd.apparmor.d"
    requested_mask="send" denied_mask="send" signal=hup
    peer="cri-containerd.apparmor.d//&unconfined"

There were hundreds of such denials per boot, with signals hup, urg and
term. With 7.0.0-1020 there are none, and the userspace is identical
(apparmor 5.0.2-0ubuntu1~26.04.1).

The stacked label comes from the unprivileged-unconfined restriction. It
is already applied on 1020, where it is harmless:

  apparmor="AUDIT" operation="change_onexec" info="change_profile unprivileged 
unconfined converted to stacking"
    profile="unconfined" name="cri-containerd.apparmor.d" comm="runc:[2:INIT]"

1023 includes "apparmor: fix unconfined user namespace restriction
forced stack" (upstream stable patchset 2026-10-05, LP: #2169638). Since
then, processes carrying the forced stack are treated as a different
peer from processes in the plain profile, so signals inside one
container are denied.

Impact

Kubernetes nodes that use containerd's default AppArmor profile are
affected. Observed on a cluster after booting 1023:

- Multi-process tools that coordinate through signals hang. For example, a 
local rsync inside a container never completes, and timeout cannot terminate it.
- Daemons cannot be reloaded via SIGHUP.
- The Go runtime's SIGURG preemption signals are denied.
- Processes that cannot be terminated block clean container shutdown, pod 
restarts and node reboots.
- Pods end up in restart loops (startup and liveness probes fail) and the node 
degrades.

Since this lands in a stable update and unattended-upgrades installs
kernels from -security, Kubernetes clusters on 26.04 can break on the
next reboot without any configuration change.

Workaround (verified)

kernel.apparmor_restrict_unprivileged_unconfined = 0. With 7.0.0-1023 and this 
setting:
- there are no signal denials and no "converted to stacking" events
- all container processes carry the plain cri-containerd.apparmor.d label
- the affected workloads behave normally again

Environment

- Ubuntu 26.04.1 LTS, arm64, linux-raspi 7.0.0-1023.23
- containerd 2.3, runc 1.4.3, apparmor 5.0.2-0ubuntu1~26.04.1
- Default sysctls (apparmor_restrict_unprivileged_userns=1, 
apparmor_restrict_unprivileged_unconfined=1)

Expected

A stable kernel update should not break signal delivery inside
containers that run under the default containerd AppArmor profile.

** Affects: linux-raspi (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: apparmor regression-proposed

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2172746

Title:
  7.0.0-1023 (raspi, based on 7.0.0-43): AppArmor denies signals inside
  containers (forced stack //&unconfined), breaking Kubernetes nodes

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux-raspi/+bug/2172746/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to