1. 19 Jan, 2018 6 commits
  2. 02 Jan, 2018 11 commits
  3. 01 Jan, 2018 11 commits
  4. 18 Dec, 2017 1 commit
  5. 17 Dec, 2017 11 commits
    • tests: s/lxc.init.cmd/lxc.init_cmd/g · 36cffe6e
      Christian Brauner authored
      lxc.init.cmd is the new key that stable-2.0 doesn't know about.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • lxc_init: fix cgroup parsing · 3fe57496
      Christian Brauner authored
      coverity: #1426132
      coverity: #1426133
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • namespace: add lxc_raw_clone() · a7ef3151
      Christian Brauner authored
      This is based on raw_clone in systemd but adapted to our needs. The main reason
      is that we need an implementation of fork()/clone() that does guarantee us that
      no pthread_atfork() handlers are run. While clone() in glibc currently doesn't
      run pthread_atfork() handlers we should be fine but there's no guarantee that
      this won't be the case in the future. So let's do the syscall directly - or as
      direct as we can. An additional nice feature is that we get fork() behavior,
      i.e. lxc_raw_clone() returns 0 in the child and the child pid in the parent.
      
      Our implementation tries to make sure that we cover all cases according to
      kernel sources. Note that we are not interested in any arguments that could be
      passed after the stack.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • commands: fix race when open()/close() cmd socket · 59beaa6f
      Christian Brauner authored
      When we report STOPPED to a caller and then close the command socket it is
      technically possible - and I've seen this happen on the test builders - that a
      container start() right after a wait() will receive ECONNREFUSED because it
      called open() before we close(). So for all new state clients simply close the
      command socket. This will inform all state clients that the container is
      STOPPED and also prevents a race between a open()/close() on the command socket
      causing a new process to get ECONNREFUSED because we haven't yet closed the
      command socket.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • SHARE_NS options should be before OPT_USAGE · 76365631
      Tycho Andersen authored
      Signed-off-by: 's avatarTycho Andersen <tycho@tycho.ws>
    • init: don't kill(-1) if we aren't in a pid ns · 76c31763
      Tycho Andersen authored
      ...otherwise we'll kill everyone on the machine. Instead, let's explicitly
      try to kill our children. Let's do a best effort against fork bombs by
      disabling forking via the pids cgroup if it exists. This is best effort for
      a number of reasons:
      
      * the pids cgroup may not be available
      * the container may have bind mounted /dev/null over pids.max, so the write
        doesn't do anything
      Signed-off-by: 's avatarTycho Andersen <tycho@tycho.ws>
    • start: fix cgroup namespace preservation · 662a9832
      Christian Brauner authored
      Prior to this patch we raced with a very short-lived init process. Essentially,
      the init process could exit before we had time to record the cgroup namespace
      causing the container to abort and report ABORTING to the caller when it
      actually started just fine. Let's not do this.
      
      (This uses syscall(SYS_getpid) in the the child to retrieve the pid just in case
      we're on an older glibc version and we end up in the namespace sharing branch
      of the actual lxc_clone() call.)
      
      Additionally this fixes the shortlived tests. They were faulty so far and
      should have actually failed because of the cgroup namespace recording race but
      the ret variable used to return from the function was not correctly
      initialized. This fixes it.
      Furthermore, the shortlived tests used the c->error_num variable to determine
      success or failure but this is actually not correct when the container is
      started daemonized.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • tools: exit success when lxc-execute is daemonized · 8ba2c9bd
      Christian Brauner authored
      The error_num value doesn't tell us anything since the container hasn't exited.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • start: do not unconditionally dup std{in,out,err} · e16da8e8
      Christian Brauner authored
      Starting with commit
      
          commit c5b93afb
          Author: Li Feng <lifeng68@huawei.com>
          Date:   Mon Jul 10 17:19:52 2017 +0800
      
              start: dup std{in,out,err} to pty slave
      
              In the case the container has a console with a valid slave pty file descriptor
              we duplicate std{in,out,err} to the slave file descriptor so console logging
              works correctly. When the container does not have a valid slave pty file
              descriptor for its console and is started daemonized we should dup to
              /dev/null.
      
              Closes #1646.
      Signed-off-by: 's avatarLi Feng <lifeng68@huawei.com>
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
      
      we made std{err,in,out} a duplicate of the slave file descriptor of the console
      if it existed. This meant we also duplicated all of them when we executed
      application containers in the foreground even if some std{err,in,out} file
      descriptor did not refer to a {p,t}ty. This blocked use cases such as:
      
          echo foo | lxc-execute -n -- cat
      
      which are very valid and common with application containers but less common
      with system containers where we don't have to care about this. So my suggestion
      is to unconditionally duplicate std{err,in,out} to the console file descriptor
      if we are either running daemonized - this ensures that daemonized application
      containers with a single bash shell keep on working - or when we are not
      running an application container. In other cases we only duplicate those file
      descriptors that actually refer to a {p,t}ty. This logic is similar to what we
      do for lxc-attach already.
      
      Refers to #1690.
      Closes #2028.
      Reported-by: 's avatarFelix Abecassis <fabecassis@nvidia.com>
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>
    • coverity: #1425857 · 53ee6301
      Christian Brauner authored
      remove logically dead code
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@ubuntu.com>