--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: trixie
User: [email protected]
Usertags: pu
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:lxc
[ Reason ]
Fix a handful of minor bugs affecting the version of lxc in trixie:
* Add lxc-net dependency to sysvinit script
* Stop printing misleading errors in enter_net_ns()
* Fix generation of apparmor.d/abstractions/lxc/container-base
* Fix restarting unprivileged containers
[ Impact ]
Users running lxc in trixie currently encounter small but annoying
bugs.
[ Tests ]
The sysvinit fix was provided by an affected user, and is a trivial
patch. I have tested the other three patches myself to verify that they
properly fix the associated bugs.
[ Risks ]
Minor/none -- the sysvinit patch is trivial and the other three are
targeted fixes cherry-picked from the upstream git repo.
[ Checklist ]
[*] *all* changes are documented in the d/changelog
[*] I reviewed all changes and I approve them
[*] attach debdiff against the package in (old)stable
[*] the issue is verified as fixed in unstable
[ Changes ]
Four patches as outlined above.
[ Other info ]
The source debdiff is attached.
diff -Nru lxc-6.0.4/debian/changelog lxc-6.0.4/debian/changelog
--- lxc-6.0.4/debian/changelog 2025-05-30 12:58:12.000000000 +0000
+++ lxc-6.0.4/debian/changelog 2025-12-26 19:02:22.000000000 +0000
@@ -1,3 +1,18 @@
+lxc (1:6.0.4-4+deb13u1) trixie; urgency=medium
+
+ [ Frost ]
+ * Add lxc-net dependency to sysvinit script (Closes: #1122149)
+
+ [ Mathias Gibbens ]
+ * Cherry-pick upstream fix to stop printing misleading errors in
+ enter_net_ns() (Closes: #1118024)
+ * Cherry-pick upstream fix for generating
+ apparmor.d/abstractions/lxc/container-base (partially addresses: #1111087)
+ * Cherry-pick upstream fix for restarting unprivileged containers
+ (Closes: #1123979)
+
+ -- Mathias Gibbens <[email protected]> Fri, 26 Dec 2025 19:02:22 +0000
+
lxc (1:6.0.4-4) unstable; urgency=medium
[ Aurelien Jarno ]
diff -Nru lxc-6.0.4/debian/gbp.conf lxc-6.0.4/debian/gbp.conf
--- lxc-6.0.4/debian/gbp.conf 2025-05-30 12:58:12.000000000 +0000
+++ lxc-6.0.4/debian/gbp.conf 2025-12-26 19:02:22.000000000 +0000
@@ -1,3 +1,3 @@
[DEFAULT]
pristine-tar = True
-debian-branch = debian/sid
+debian-branch = debian/trixie
diff -Nru lxc-6.0.4/debian/patches/0101-cherry-pick-fix-misleading-errors.patch lxc-6.0.4/debian/patches/0101-cherry-pick-fix-misleading-errors.patch
--- lxc-6.0.4/debian/patches/0101-cherry-pick-fix-misleading-errors.patch 1970-01-01 00:00:00.000000000 +0000
+++ lxc-6.0.4/debian/patches/0101-cherry-pick-fix-misleading-errors.patch 2025-12-26 19:02:22.000000000 +0000
@@ -0,0 +1,82 @@
+From a53589e0636b42a2816375c9a2c1c4be09100297 Mon Sep 17 00:00:00 2001
+From: Alexander Mikhalitsyn <[email protected]>
+Date: Mon, 28 Jul 2025 19:00:29 +0200
+Subject: [PATCH] lxc/lxccontainer: stop printing misleading errors in
+ enter_net_ns()
+
+In enter_net_ns() we try to enter network namespace at first, before
+entering a user namespace to support inherited netns case properly.
+It is expected to get EPERM for unprivileged container with non-shared
+network namespace at first try. Let's take this into account
+and stop misleading users with these error messages.
+
+Link: https://discuss.linuxcontainers.org/t/lxc-ls-fancy-command-shows-operation-not-permitted/24080
+Fixes: 3011e79f92ef ("lxccontainer: fix enter_net_ns helper to work when netns is inherited")
+Fixes: #4560
+Signed-off-by: Alexander Mikhalitsyn <[email protected]>
+---
+ src/lxc/lxccontainer.c | 2 +-
+ src/lxc/utils.c | 10 +++++++---
+ src/lxc/utils.h | 8 +++++++-
+ 3 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
+index 7b9ff9641d..6c80065a65 100644
+--- a/src/lxc/lxccontainer.c
++++ b/src/lxc/lxccontainer.c
+@@ -2220,7 +2220,7 @@ static inline bool enter_net_ns(struct lxc_container *c)
+ if (pid < 0)
+ return false;
+
+- net_ns_entered = switch_to_ns(pid, "net");
++ net_ns_entered = try_switch_to_ns(pid, "net", true);
+
+ if ((geteuid() != 0 || (c->lxc_conf && !list_empty(&c->lxc_conf->id_map))) &&
+ (access("/proc/self/ns/user", F_OK) == 0))
+diff --git a/src/lxc/utils.c b/src/lxc/utils.c
+index 60f2b70003..af276a3b55 100644
+--- a/src/lxc/utils.c
++++ b/src/lxc/utils.c
+@@ -878,7 +878,7 @@ int detect_shared_rootfs(void)
+ return 0;
+ }
+
+-bool switch_to_ns(pid_t pid, const char *ns)
++bool try_switch_to_ns(pid_t pid, const char *ns, bool optional)
+ {
+ __do_close int fd = -EBADF;
+ int ret;
+@@ -896,8 +896,12 @@ bool switch_to_ns(pid_t pid, const char *ns)
+ return log_error_errno(false, errno, "Failed to open \"%s\"", nspath);
+
+ ret = setns(fd, 0);
+- if (ret)
+- return log_error_errno(false, errno, "Failed to set process %d to \"%s\" of %d", pid, ns, fd);
++ if (ret) {
++ if (optional)
++ return log_trace_errno(false, errno, "Failed to set process %d to \"%s\" of %d", pid, ns, fd);
++ else
++ return log_error_errno(false, errno, "Failed to set process %d to \"%s\" of %d", pid, ns, fd);
++ }
+
+ return true;
+ }
+diff --git a/src/lxc/utils.h b/src/lxc/utils.h
+index 0007b51a60..e72582aa24 100644
+--- a/src/lxc/utils.h
++++ b/src/lxc/utils.h
+@@ -134,7 +134,13 @@ __hidden extern bool is_shared_mountpoint(const char *path);
+ __hidden extern int detect_shared_rootfs(void);
+ __hidden extern bool detect_ramfs_rootfs(void);
+ __hidden extern char *on_path(const char *cmd, const char *rootfs);
+-__hidden extern bool switch_to_ns(pid_t pid, const char *ns);
++
++__hidden extern bool try_switch_to_ns(pid_t pid, const char *ns, bool optional);
++inline static bool switch_to_ns(pid_t pid, const char *ns)
++{
++ return try_switch_to_ns(pid, ns, false);
++}
++
+ __hidden extern char *get_template_path(const char *t);
+ __hidden extern int safe_mount(const char *src, const char *dest, const char *fstype,
+ unsigned long flags, const void *data, const char *rootfs);
diff -Nru lxc-6.0.4/debian/patches/0102-cherry-pick-apparmor-generation.patch lxc-6.0.4/debian/patches/0102-cherry-pick-apparmor-generation.patch
--- lxc-6.0.4/debian/patches/0102-cherry-pick-apparmor-generation.patch 1970-01-01 00:00:00.000000000 +0000
+++ lxc-6.0.4/debian/patches/0102-cherry-pick-apparmor-generation.patch 2025-12-26 19:02:22.000000000 +0000
@@ -0,0 +1,56 @@
+From 52929fc21809d57bb57f86142bc8d84223d44b7f Mon Sep 17 00:00:00 2001
+From: Mathias Gibbens <[email protected]>
+Date: Sun, 26 Oct 2025 20:02:29 +0000
+Subject: [PATCH] config/apparmor/abstractions: Fix meson build generation of
+ container-base
+
+Previously, abstractions/container-base was a hand-generated concatenation of
+two different files, abstractions/container-base.in and container-rules. This
+was confusing, since the meson configuration didn't actually create
+abstractions/container-base from abstractions/container-base.in. Now, the
+previously manual step of creating abstractions/container-base is part of the
+meson configure step.
+
+Signed-off-by: Mathias Gibbens <[email protected]>
+---
+ config/apparmor/README | 14 ++++----------
+ config/apparmor/abstractions/meson.build | 5 +++--
+ 2 files changed, 7 insertions(+), 12 deletions(-)
+
+diff --git a/config/apparmor/README b/config/apparmor/README
+index 432956b9ae..76031601ad 100644
+--- a/config/apparmor/README
++++ b/config/apparmor/README
+@@ -1,12 +1,6 @@
+-The abstractions/container-base file is partially automatically
+-generated. The two source files are container-rules.base and
+-abstractions/container-base.in. If these file are updated,
+-then
+-
+-1. Generate a new container-rules file using
++The abstractions/container-base file installed is automatically
++generated. Its two source files are container-rules.base and
++abstractions/container-base.in. If container-rules.base is updated,
++generate a new container-rules file using
+
+ ./lxc-generate-aa-rules.py container-rules.base > container-rules
+-
+-2. Concatenate container-base.in with container-rules using
+-
+-cat abstractions/container-base.in container-rules > abstractions/container-base
+diff --git a/config/apparmor/abstractions/meson.build b/config/apparmor/abstractions/meson.build
+index b8a8e40339..8424c38b0b 100644
+--- a/config/apparmor/abstractions/meson.build
++++ b/config/apparmor/abstractions/meson.build
+@@ -2,8 +2,9 @@
+
+ if libapparmor.found()
+ configure_file(
+- configuration: conf,
+- input: 'container-base',
++ command: ['cat', '@INPUT@'],
++ capture: true,
++ input: ['container-base.in', '../container-rules'],
+ output: 'container-base',
+ install: true,
+ install_dir: join_paths(sysconfdir, 'apparmor.d', 'abstractions', 'lxc'))
diff -Nru lxc-6.0.4/debian/patches/0103-cherry-pick-fix-dbus-reboots.patch lxc-6.0.4/debian/patches/0103-cherry-pick-fix-dbus-reboots.patch
--- lxc-6.0.4/debian/patches/0103-cherry-pick-fix-dbus-reboots.patch 1970-01-01 00:00:00.000000000 +0000
+++ lxc-6.0.4/debian/patches/0103-cherry-pick-fix-dbus-reboots.patch 2025-12-26 19:02:22.000000000 +0000
@@ -0,0 +1,43 @@
+From 0f5852edfad06fe4e9f00aaddd3d93576269729e Mon Sep 17 00:00:00 2001
+From: Serge Hallyn <[email protected]>
+Date: Tue, 23 Dec 2025 13:56:31 -0600
+Subject: [PATCH] cgfsng: fix reboots when using dbus
+
+When using dbus on a systemd system, we ask systemd to create a
+"scope" for us to run in. We send a dbus message, and wait
+for the reply saying it is created.
+
+When we reboot, we were re-sending the request to create the
+scope. However, the scope still exists, because or single
+lxc-monitor (originally lxc-start) thread is still under the
+'lxc.pivot' sub-directory of the scope.
+
+But, on reboot, our lxc_conf already has our scope recorded!
+So, just check whether that is set, and skip scope creation
+if so.
+
+With this patch, i can reboot ad nauseum with no apparent
+problems.
+
+We could probably move this check to the top of the function,
+but for now this fixes the bug.
+
+Signed-off-by: Serge Hallyn <[email protected]>
+---
+ src/lxc/cgroups/cgfsng.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c
+index eea2b1f6d9..81994817c5 100644
+--- a/src/lxc/cgroups/cgfsng.c
++++ b/src/lxc/cgroups/cgfsng.c
+@@ -1521,6 +1521,9 @@ static int unpriv_systemd_create_scope(struct cgroup_ops *ops, struct lxc_conf *
+ dbus_threads_initialized = true;
+ }
+
++ if (conf->cgroup_meta.systemd_scope != NULL)
++ return log_error(true, "Already in a scope, must be a reboot.");
++
+ connection = open_systemd();
+ if (connection == NULL)
+ return log_error(false, "Failed opening dbus connection");
diff -Nru lxc-6.0.4/debian/patches/0104-Add-lxc-net-as-dependency-in-sysvinit-script.patch lxc-6.0.4/debian/patches/0104-Add-lxc-net-as-dependency-in-sysvinit-script.patch
--- lxc-6.0.4/debian/patches/0104-Add-lxc-net-as-dependency-in-sysvinit-script.patch 1970-01-01 00:00:00.000000000 +0000
+++ lxc-6.0.4/debian/patches/0104-Add-lxc-net-as-dependency-in-sysvinit-script.patch 2025-12-26 19:02:22.000000000 +0000
@@ -0,0 +1,28 @@
+From 8f67650034c0b031cc2b24314c8167baaa8fbe44 Mon Sep 17 00:00:00 2001
+From: Frost <[email protected]>
+Date: Sun, 7 Dec 2025 15:56:49 -0800
+Subject: [PATCH] Add lxc-net as dependency in sysvinit script
+
+Otherwise containers don't start during boot, but come up fine later.
+---
+ config/init/sysvinit/lxc-containers.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/config/init/sysvinit/lxc-containers.in b/config/init/sysvinit/lxc-containers.in
+index f793d20..5543b05 100644
+--- a/config/init/sysvinit/lxc-containers.in
++++ b/config/init/sysvinit/lxc-containers.in
+@@ -9,8 +9,8 @@
+ # Provides: lxc
+ # Required-Start: $syslog $remote_fs
+ # Required-Stop: $syslog $remote_fs
+-# Should-Start: cgroupfs-mount
+-# Should-Stop: cgroupfs-mount
++# Should-Start: cgroupfs-mount lxc-net
++# Should-Stop: cgroupfs-mount lxc-net
+ # Default-Start: 2 3 4 5
+ # Default-Stop: 0 1 6
+ # Short-Description: Bring up/down LXC autostart containers
+--
+2.51.0
+
diff -Nru lxc-6.0.4/debian/patches/series lxc-6.0.4/debian/patches/series
--- lxc-6.0.4/debian/patches/series 2025-05-30 12:58:12.000000000 +0000
+++ lxc-6.0.4/debian/patches/series 2025-12-26 19:02:22.000000000 +0000
@@ -3,3 +3,7 @@
0003-apparmor-4x-userns.patch
0004-cherry-pick-complex-hooks-fix.patch
0005-cherry-pick-loong64.patch
+0101-cherry-pick-fix-misleading-errors.patch
+0102-cherry-pick-apparmor-generation.patch
+0103-cherry-pick-fix-dbus-reboots.patch
+0104-Add-lxc-net-as-dependency-in-sysvinit-script.patch
signature.asc
Description: This is a digitally signed message part
--- End Message ---