aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerge Hallyn <serge.hallyn@canonical.com>2012-03-19 00:31:40 +0100
committerDaniel Lezcano <daniel.lezcano@free.fr>2012-03-19 00:31:40 +0100
commit69182a318c3ba35f56a88891cabad25d9f7985b6 (patch)
treea8da72b063c2c71c00dbb3aa4a52991a04f0b33a
parentfix cached rootfs update* fix rootfs path* add handling of systemd (diff)
downloadlxc-69182a318c3ba35f56a88891cabad25d9f7985b6.tar.gz
lxc-69182a318c3ba35f56a88891cabad25d9f7985b6.tar.bz2
lxc-69182a318c3ba35f56a88891cabad25d9f7985b6.zip
do check for utmp checking at the right time
We were doing the check for whether we need to watch utmp from a thread cloned from that which will actually do the utmp watching. As a result, the utmp file was always being watched, even if it didn't need to be. Move the check to the parent thread. Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/lxc/+bug/948623 Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com> Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
-rw-r--r--src/lxc/start.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lxc/start.c b/src/lxc/start.c
index fc2a1b1..7af1e37 100644
--- a/src/lxc/start.c
+++ b/src/lxc/start.c
@@ -503,16 +503,12 @@ static int do_start(void *data)
if (lxc_sync_barrier_parent(handler, LXC_SYNC_CONFIGURE))
return -1;
- if (must_drop_cap_sys_boot()) {
+ if (handler->conf->need_utmp_watch) {
if (prctl(PR_CAPBSET_DROP, CAP_SYS_BOOT, 0, 0, 0)) {
SYSERROR("failed to remove CAP_SYS_BOOT capability");
return -1;
}
- handler->conf->need_utmp_watch = 1;
DEBUG("Dropped cap_sys_boot\n");
- } else {
- DEBUG("Not dropping cap_sys_boot or watching utmp\n");
- handler->conf->need_utmp_watch = 0;
}
/* Setup the container, ip, names, utsname, ... */
@@ -635,6 +631,14 @@ int __lxc_start(const char *name, struct lxc_conf *conf,
handler->ops = ops;
handler->data = data;
+ if (must_drop_cap_sys_boot()) {
+ handler->conf->need_utmp_watch = 1;
+ DEBUG("Dropping cap_sys_boot and watching utmp\n");
+ } else {
+ DEBUG("Not dropping cap_sys_boot or watching utmp\n");
+ handler->conf->need_utmp_watch = 0;
+ }
+
err = lxc_spawn(handler);
if (err) {
ERROR("failed to spawn '%s'", name);