1 Star 0 Fork 0

xiaods / runc

标签名
描述
提交信息
操作

v1.1.0 -- "A plan depends as much upon execution as it does upon concept."

This release only contains very minor changes from v1.1.0-rc.1 and is
the first release of the 1.1.y release series of runc.

Changed:

  • libcontainer will now refuse to build without the nsenter package being
    correctly compiled (specifically this requires CGO to be enabled). This
    should avoid folks accidentally creating broken runc binaries (and
    incorrectly importing our internal libraries into their projects). (#3331)

Thanks to the following people who made this release possible:

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2022-01-14 12:43

v1.1.0~rc1 -- "He who controls the spice controls the universe."

This release is the first release candidate for the next minor release
following runc 1.0. It contains all of the bugfixes included in runc 1.0
patch releases (up to and including 1.0.3).

A fair few new features have been added, and several features have been
deprecated (with plans for removal in runc 1.2). At the moment we only
plan to do a single release candidate for runc 1.1, and once 1.1.0 is
released we will not continue updating the 1.0.z runc branch.

Deprecated:

  • runc run/start now warns if a new container cgroup is non-empty or frozen;
    this warning will become an error in runc 1.2. (#3132, #3223)
  • runc can only be built with Go 1.16 or later from this release onwards.
    (#3100, #3245)

Removed:

  • cgroup.GetHugePageSizes has been removed entirely, and been replaced with
    cgroup.HugePageSizes which is more efficient. (#3234)
  • intelrdt.GetIntelRdtPath has been removed. Users who were using this
    function to get the intelrdt root should use the new intelrdt.Root
    instead. (#2920, #3239)

Added:

  • Add support for RDMA cgroup added in Linux 4.11. (#2883)
  • runc exec now produces exit code of 255 when the exec failed.
    This may help in distinguishing between runc exec failures
    (such as invalid options, non-running container or non-existent
    binary etc.) and failures of the command being executed. (#3073)
  • runc run: new --keep option to skip removal exited containers artefacts.
    This might be useful to check the state (e.g. of cgroup controllers) after
    the container hasexited. (#2817, #2825)
  • seccomp: add support for SCMP_ACT_KILL_PROCESS and SCMP_ACT_KILL_THREAD
    (the latter is just an alias for SCMP_ACT_KILL). (#3204)
  • seccomp: add support for SCMP_ACT_NOTIFY (seccomp actions). This allows
    users to create sophisticated seccomp filters where syscalls can be
    efficiently emulated by privileged processes on the host. (#2682)
  • checkpoint/restore: add an option (--lsm-mount-context) to set
    a different LSM mount context on restore. (#3068)
  • runc releases are now cross-compiled for several architectures. Static
    builds for said architectures will be available for all future releases.
    (#3197)
  • intelrdt: support ClosID parameter. (#2920)
  • runc exec --cgroup: an option to specify a (non-top) in-container cgroup
    to use for the process being executed. (#3040, #3059)
  • cgroup v1 controllers now support hybrid hierarchy (i.e. when on a cgroup v1
    machine a cgroup2 filesystem is mounted to /sys/fs/cgroup/unified, runc
    run/exec now adds the container to the appropriate cgroup under it). (#2087,
    #3059)
  • sysctl: allow slashes in sysctl names, to better match sysctl(8)'s
    behaviour. (#3254, #3257)
  • mounts: add support for bind-mounts which are inaccessible after switching
    the user namespace. Note that this does not permit the container any
    additional access to the host filesystem, it simply allows containers to
    have bind-mounts configured for paths the user can access but have
    restrictive access control settings for other users. (#2576)
  • Add support for recursive mount attributes using mount_setattr(2). These
    have the same names as the proposed mount(8) options -- just prepend r
    to the option name (such as rro). (#3272)
  • Add runc features subcommand to allow runc users to detect what features
    runc has been built with. This includes critical information such as
    supported mount flags, hook names, and so on. Note that the output of this
    command is subject to change and will not be considered stable until runc
    1.2 at the earliest. The runtime-spec specification for this feature is
    being developed in opencontainers/runtime-spec#1130. (#3296)

Changed:

  • system: improve performance of /proc/$pid/stat parsing. (#2696)
  • cgroup2: when /sys/fs/cgroup is configured as a read-write mount, change
    the ownership of certain cgroup control files (as per
    /sys/kernel/cgroup/delegate) to allow for proper deferral to the container
    process. (#3057)
  • docs: series of improvements to man pages to make them easier to read and
    use. (#3032)

Libcontainer API:

  • internal api: remove internal error types and handling system, switch to Go
    wrapped errors. (#3033)
  • New configs.Cgroup structure fields (#3177):
    • Systemd (whether to use systemd cgroup manager); and
    • Rootless (whether to use rootless cgroups).
  • New cgroups/manager package aiming to simplify cgroup manager instantiation.
    (#3177)
  • All cgroup managers' instantiation methods now initialize cgroup paths and
    can return errors. This allows to use any cgroup manager method (e.g.
    Exists, Destroy, Set, GetStats) right after instantiation, which was not
    possible before (as paths were initialized in Apply only). (#3178)

Fixed:

  • nsenter: do not try to close already-closed fds during container setup and
    bail on close(2) failures. (#3058)
  • runc checkpoint/restore: fixed for containers with an external bind mount
    which destination is a symlink. (#3047).
  • cgroup: improve openat2 handling for cgroup directory handle hardening.
    (#3030)
  • runc delete -f now succeeds (rather than timing out) on a paused
    container. (#3134)
  • runc run/start/exec now refuses a frozen cgroup (paused container in case of
    exec). Users can disable this using --ignore-paused. (#3132, #3223)
  • config: do not permit null bytes in mount fields. (#3287)

Thanks to the following people who made this release possible:

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-12-09 14:07

v1.0.3 -- "If you were waiting for the opportune moment, that was it."

This is the third stable release in the 1.0 branch, fixing a handful of medium
priority issues related to mounts and cgroups, as well as a potential security
vulnerability.

This release is expected to be the last point release in the 1.0 branch, as we
are planning to release runc 1.1 in the near future.

Security:

  • A potential vulnerability was discovered in runc (related to an internal
    usage of netlink), however upon further investigation we discovered that
    while this bug was exploitable on the master branch of runc, no released
    version of runc could be exploited using this bug. The exploit required
    being able to create a netlink attribute with a length that would overflow a
    uint16 but this was not possible in any released version of runc. For more
    information see GHSA-v95c-p5hm-xq8f and CVE-2021-43784.

    Due to an abundance of caution we decided to do an emergency release with
    this fix, but to reiterate we do not believe this vulnerability was
    possible to exploit
    . Thanks to Felix Wilhelm from Google Project Zero for
    discovering and reporting this vulnerability so quickly.

Bugfixes:

  • Fixed inability to start a container with read-write bind mount of a
    read-only fuse host mount (#3292)
  • Fixed inability to start when read-only /dev in set in spec (#3277)
  • Fixed not removing sub-cgroups upon container delete, when rootless cgroup v2
    is used with older systemd (#3297)
  • Fixed returning error from GetStats when hugetlb is unsupported (which causes
    excessive logging for kubernetes) (#3295)
  • [CI only] Fixed criu 3.16 compatibility issue (#3282)
  • [CI only] Add Go 1.17 to the testing matrix (#3299)

Enhancements:

  • Improved an error message when dbus-user-session is not installed and
    rootless + cgroup2 + systemd are used (#3212)

Thanks to all of the contributors who made this release possible:

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-12-03 08:01

v1.0.2 -- "Given the right lever, you can move a planet."

This is a second stable release in 1.0 branch, fixing a few medium and
high priority issues, including one that affects Kubernetes' usage of
runc's libcontainer.

Bugfixes:

  • Fixed a failure to set CPU quota period in some cases on cgroup v1. (#3115)
  • Fixed the inability to start a container with the "adding seccomp filter
    rule for syscall ..." error, caused by redundant seccomp rules (i.e. those
    that has action equal to the default one). Such redundant rules are now
    skipped. (#3129)
  • Made release builds reproducible from now on. (#3142)
  • Fixed a rare debug log race in runc init, which can result in occasional
    harmful "failed to decode ..." errors from runc run or exec. (#3130)
  • Fixed the check in cgroup v1 systemd manager if a container needs to be
    frozen before Set, and add a setting to skip such freeze unconditionally.
    The previous fix for that issue, done in runc 1.0.1, was not working.
    (#3167)

Thanks to all of the contributors who made this release possible:

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-08-20 15:24

v1.0.1 -- "If in doubt, Meriadoc, always follow your nose."

This is the first stable release in the 1.0 branch, fixing a few medium
and high priority issues with runc 1.0.0, including a few that affect
Kubernetes' usage of libcontainer.

Bugfixes:

  • Fixed occasional runc exec/run failure ("interrupted system call") on an
    Azure volume. (#3074)
  • Fixed "unable to find groups ... token too long" error with /etc/group
    containing lines longer than 64K characters. (#3079)
  • cgroup/systemd/v1: fix leaving cgroup frozen after Set if a parent cgroup is
    frozen. This is a regression in 1.0.0, not affecting runc itself but some
    of libcontainer users (e.g Kubernetes). (#3085)
  • cgroupv2: bpf: Ignore inaccessible existing programs in case of
    permission error when handling replacement of existing bpf cgroup
    programs. This fixes a regression in 1.0.0, where some SELinux
    policies would block runc from being able to run entirely. (#3087)
  • cgroup/systemd/v2: don't freeze cgroup on Set. (#3092)
  • cgroup/systemd/v1: avoid unnecessary freeze on Set. (#3093)

Thanks to all of the contributors who made this release possible:

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-07-16 12:39

v1.0.0 -- "A wizard is never late, nor is he early, he arrives precisely when he means to."

This release fixes a few bugs found (almost all related to cgroupv2
handling), and is the first non-rc release of runc in 5 years
(v1.0.0-rc1 was released in 2016). It's been a very long road, and we
thank the many contributors and maintainers that helped us get to this
point (approximately 422 people in total).

As runc follows Semantic Versioning, we will endeavor to not make any
breaking changes without bumping the major version number of runc.

However, it should be noted that Go API usage of runc's internal
implementation (libcontainer) is not covered by this policy -- for
historical reasons, this code was not moved into an "internal" package
(this feature did not exist in Go at the time) and because certain
projects currently depend on this, we have not yet moved this code into
an internal package. Despite this, we reserve the right to make breaking
changes in our Go APIs (though we will note such changes in our
changelog, and will try to avoid needless disruption if possible).

Breaking changes:

  • Removed libcontainer/configs.Device* identifiers (deprecated since rc94,
    use libcontainer/devices) (#2999)
  • Removed libcontainer/system.RunningInUserNS function (deprecated since
    rc94, use libcontainer/userns) (#2999)

Deprecations:

  • The usage of relative paths for mountpoints will now produce a warning
    (such configurations are outside of the spec, and in future runc will
    produce an error when given such configurations). (#2917, #3004)

Bugfixes:

  • cgroupv2: devices: rework the filter generation to produce consistent
    results with cgroupv1, and always clobber any existing eBPF
    program(s) to fix runc update and avoid leaking eBPF programs
    (resulting in errors when managing containers). (#2951)
  • cgroupv2: correctly convert "number of IOs" statistics in a
    cgroupv1-compatible way. (#2965, #2967, #2968, #2964)
  • cgroupv2: support larger than 32-bit IO statistics on 32-bit architectures.
  • cgroupv2: wait for freeze to finish before returning from the freezing
    code, optimize the method for checking whether a cgroup is frozen. (#2955)
  • cgroups/systemd: fixed "retry on dbus disconnect" logic introduced in rc94
  • cgroups/systemd: fixed returning "unit already exists" error from a systemd
    cgroup manager (regression in rc94) (#2997, #2996)

Improvements:

  • cgroupv2: support SkipDevices with systemd driver (#2958, #3019)
  • cgroup/systemd: return, not ignore, stop unit error from Destroy (#2946)
  • Fix all golangci-lint failures. (#2781, #2962)
  • Make "runc --version" output sane even when built with go get or
    otherwise outside of our build scripts. (#2962)
  • cgroups: set SkipDevices during runc update (so we don't modify
    cgroups at all during runc update). (#2994)
  • cgroup1: blkio: support BFQ weights. (#3010)
  • cgroupv2: set per-device io weights if BFQ IO scheduler is available.
    (#3022)

Thanks to the following people who made this release possible:

Vote: +5 -0 %2
Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-06-01 17:09

v1.0.0-rc95 -- "Just when I thought I was out, they pull me back in."

This release of runc contains a fix for CVE-2021-304651, and users are
strongly recommended to update (especially if you are providing
semi-limited access to spawn containers to untrusted users).

Aside from this security fix, only a few other changes were made since
v1.0.0-rc94 (the only user-visible change was the addition of support
for defaultErrnoRet in seccomp profiles).

Thanks to the following people who made this release possible:

Due to the nature of this release, it didn't go through the normal
public release procedure. However, this break from procedure was agreed
upon on the security mailing list.

Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-05-19 14:59

v1.0.0-rc94 -- "Time is an illusion. Lunchtime doubly so."

This release fixes several regressions found in v1.0.0-rc93. We
recommend users update as soon as possible. This release includes the
following notable changes:

Potentially breaking changes:

  • cgroupv1: kernel memory limits are now always ignored, as kmemcg has
    been effectively deprecated by the kernel. Users should make use of
    regular memory cgroup controls. (#2840)
  • libcontainer/cgroups: cgroup managers' Set now accept
    configs.Resources rather than configs.Cgroups (#2906)
  • libcontainer/cgroups/systemd: reconnect and retry in case dbus
    connection is closed (after dbus restart) (#2923)
  • libcontainer/cgroups/systemd: don't set limits in Apply (#2814)

Bugfixes:

  • seccomp: fix 32-bit compilation errors (regression in rc93, #2783)
  • cgroupv2: blkio weight value conversion fix (#2786)
  • runc init: fix a hang caused by deadlock in seccomp/ebpf loading code
    (regression in rc93, #2871)
  • runc start: fix "chdir to cwd: permission denied" for some setups
    (regression in rc93, #2894)
  • s390: fix broken terminal (regression in rc93, #2898)

Improvements:

  • runc start/exec: better diagnostics when container limits are too low
    (#2812)
  • runc start/exec: better cleanup after failed runc init (#2855)
  • cgroupv1: improve freezing chances (#2941, #2918, #2791)
  • cgroupv2: multiple GetStats improvements (#2816, #2873)
  • cgroupv2: fallback to setting io.weight if io.bfq.weight is not
    available (#2820)
  • capabilities: WARN, not ERROR, for unknown / unavailable capabilities
    (#2854)

Thanks to the following people who made this release possible:

Vote: +6 -0 !1
Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-05-01 23:25

v1.0.0~rc93 -- "I never could get the hang of Thursdays."

This is the last feature-rich RC release and we are in a feature-freeze until
1.0. 1.0.0~rc94 will be released in a few weeks with minimal bug fixes only,
and 1.0.0 will be released soon afterwards.

  • runc's cgroupv2 support is no longer considered experimental. It is now
    believed to be fully ready for production deployments. In addition, runc's
    cgroup code has been improved:

    • The systemd cgroup driver has been improved to be more resilient and
      handle more systemd properties correctly.
    • We now make use of openat2(2) when possible to improve the security of
      cgroup operations (in future runc will be wholesale ported to libpathrs to
      get this protection in all codepaths).
  • runc's mountinfo parsing code has been reworked significantly, making
    container startup times significantly faster and less wasteful in general.

  • runc now has special handling for seccomp profiles to avoid making new
    syscalls unusable for glibc. This is done by installing a custom prefix to
    all seccomp filters which returns -ENOSYS for syscalls that are newer than
    any syscall in the profile (meaning they have a larger syscall number).

    This should not cause any regressions (because previously users would simply
    get -EPERM rather than -ENOSYS, and the rule applied above is the most
    conservative rule possible) but please report any regressions you find as a
    result of this change -- in particular, programs which have special fallback
    code that is only run in the case of -EPERM.

  • runc now supports the following new runtime-spec features:

    • The umask of a container can now be specified.
    • The new Linux 5.9 capabilities (CAP_PERFMON, CAP_BPF, and
      CAP_CHECKPOINT_RESTORE) are now supported.
    • The "unified" cgroup configuration option, which allows users to explicitly
      specify the limits based on the cgroup file names rather than abstracting
      them through OCI configuration. This is currently limited in scope to
      cgroupv2.
  • Various rootless containers improvements:

    • runc will no longer cause conflicts if a user specifies a custom device
      which conflicts with a user-configured device -- the user device takes
      precedence.
    • runc no longer panics if /sys/fs/cgroup is missing in rootless mode.
  • runc --root is now always treated as local to the current working directory.

  • The --no-pivot-root hardening was improved to handle nested mounts properly
    (please note that we still strongly recommend that users do not use
    --no-pivot-root -- it is still an insecure option).

  • A large number of code cleanliness and other various cleanups, including
    fairly large changes to our tests and CI to make them all run more
    efficiently.

For packagers the following changes have been made which will have impact on
your packaging of runc:

  • The "selinux" and "apparmor" buildtags have been removed, and now all runc
    builds will have SELinux and AppArmor support enabled. Note that "seccomp"
    is still optional (though we very highly recommend you enable it).

  • make install DESTDIR= now functions correctly.

Thanks to the following people who made this release possible:

Vote: +6 -0 #1
Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2021-02-03 08:57

v1.0.0~rc92

This release contains a hotfix to solve a regression in v1.0.0-rc91 that
concerns Docker (this only affects Docker's vendoring of libcontainer,
not the usage of runc as the runtime):

  • Fix helpers used by Docker to correctly handle symlinks in /dev (when running
    with --privileged containers).

As well as some other improvements:

  • Updates to CRIU support.
  • Improvements to cgroupfs performance and correctness.

Thanks to the following people who made this release possible:

Vote: +4 -0 #3
Signed-off-by: Aleksa Sarai cyphar@cyphar.com

2020-08-06 00:26

v1.0.0-rc91

This is intended to be the second-last RC release, with -rc92 having
very few large changes so that we can release runc 1.0 (at long last).

  • The long-awaited hooks changes have been merged into runc. This was
    one of the few remaining spec-related issues which were blocking us
    from releasing runc 1.0. Existing hook users will not be affected by
    this change, but runc now supports additional hooks that we expect
    users to migrate to eventually. The new hooks are:

    • createRuntime (replacement for the now-deprecated prestart)
    • createContainer
    • startContainer
  • A large amount of effort has been undertaken to support cgroupv2
    within runc. The support is still considered experimental, but it is
    mostly functional at this point. Please report any bugs you find when
    running under cgroupv2-only systems.

  • A minor-severity security bug was fixed1. The devices list would
    be in allow-by-default mode from the outset, meaning that users would
    have to explicitly specify they wish to deny all device access at the
    beginning of the configuration. While this would normally be
    considered a high-severity vulnerability, all known users of runc had
    worked around this issue several years ago (hence why this fairly
    obvious bug was masked).

    In addition, the devices list code has been massively improved such
    that it will attempt to avoid causing spurrious errors in the
    container (such as while writing to /dev/null) when doing devices
    cgroup updates.

  • A security audit of runc was conducted in 2019, and the report PDF is
    now included in the runc repository. The previous release of runc
    has already addressed the security issues found in that report.

Thanks to the following people who made this release possible:

NOTE: For those who are confused by the massive version jump (rc10
to rc91), this was done to avoid issues with SemVer and lexical
comparisons -- there haven't been 90 other release candidates. Please
also note thatrunc 1.0.0-rc90 is identical to 1.0.0-rc10.

Vote: +7 -0 #0
Signed-off-by: Aleksa Sarai asarai@suse.de

2020-06-30 23:24

v1.0.0-rc90

This release is identical to v1.0.0-rc10.

The purpose of this release is to resolve an issue with our versioning
scheme (in particular, the format we've used under SemVer means that the
"-rcNN" string suffix is sorted lexicographically rather than in the
classic sort -V order).

Because we cannot do a post-1.0 release yet, this is a workaround to
make sure that systems such as Go modules correctly update to the latest
runc release. See 1 for more details.

The next release (which would've originally been called -rc11) will be
1.0.0-rc91. I'm sorry.

Signed-off-by: Aleksa Sarai asarai@suse.de

2020-01-23 00:19

v1.0.0~rc10

This is a hot-fix for v1.0.0~rc9, primarily fixing CVE-2019-19921. Given
that the relevant runtime-spec PR which was considered a blocker has
been merged1 the next rc release of runc should be the last one before
1.0.0.

Thanks to the following people who made this release possible:

Vote: +4 -0 #1
Signed-off-by: Aleksa Sarai asarai@suse.de

2020-01-23 00:19

v1.0.0~rc9

This is a hot-fix for v1.0.0~rc8, primarily fixing CVE-2019-16884.

Thanks to the following people who made this release possible:

Vote: +4 -0 #1
Signed-off-by: Aleksa Sarai asarai@suse.de

2019-10-01 00:36

v1.0.0~rc8

This is a hot-fix for v1.0.0-rc7, and fixes a regression on old kernels
(which don't support keycreate labeling). Users are strongly encouraged
to update, as this regression was introduced in 1.0.0-rc7 and has
blocked many users from updating to mitigate CVE-2019-5736.

Bugs: #2032 #2031 #2043

At the moment the only outlying issue before we can release 1.0.0 is
some spec discussions we are having about OCI hooks and how to handle
the integration with existing NVIDIA hooks. We will do our best to
finish this work as soon as we can.

Thanks to the following people who made this release possible:

Vote: +4 -0 #1
Signed-off-by: Aleksa Sarai asarai@suse.de

2019-04-25 05:48

v1.0.0~rc7

Due to CVE-2019-5736, we had to do another -rc release so users can update. We
hope to be able to release 1.0.0 in the near future (there is still an
outstanding spec-compliance issue with OCI hooks which we need to resolve
first).

This also updates runc to a vendored commit of the runtime-spec rather than a
full release, which will hopefully be rectified with runc 1.0.0. #k

Security:

  • Mitigate CVE-2019-5736. This is an updated version of the patch series sent
    out on openwall and we encourage users to update. #1982 #1984

    NOTE: This mitigation WILL NOT WORK if you run untrusted containers with
    host uid 0 and give them CAP_SYS_ADMIN (the protection operates
    through a hidden read-only bind-mount which can be re-mounted by
    CAP_SYS_ADMIN privileged users).

      Put simply -- we consider granting CAP_SYS_ADMIN to untrusted
      containers without user namespaces to be fundamentally insecure, as
      such we do not consider this to be a security issue.
    
      If you want an additional host-level mitigation, use `chattr +i` on
      the host file to ensure containers without CAP_LINUX_IMMUTABLE cannot
      write to it -- even with CAP_SYS_ADMIN. But as above, if you give
      CAP_LINUX_IMMUTABLE to a container you will have problems.
    
      An alternative is to bind-mount a sealed memfd copy of the runc
      binary over the binary (runc will detect this and will not attempt
      further mitigation, because sealed memfds are fundamentally
      unmodifiable) but this requires more in-depth work by administrators.
    
  • There appear to be production users of --no-pivot-root, which is something
    that we absolutely recommend against and do not consider to be a secure
    configuration -- since pivot_root(2) has many security properties that are
    not possible to provide with just chroot(2).

    However, a specific issue was discovered which we decided to mitigate in
    order to avoid production users being exploited by it. This security issue
    is not elligible for a CVE because it requires an insecure configuration
    (--no-pivot-root). #1962

Features:

  • Add intelrdt support for MBA to runc (a new intelrdt feature available in
    Linux 4.18+). #1919
  • Add support for specifying a CRIU configuration file for checkpoint/restore
    (which makes use of a new org.criu.config annotation). #1933 #1964
  • Add support for "runc exec --preserve-fds". #1995
  • Added support for SELinux labeling of keyrings. #2012

Fixes:

  • Correct handling of "runc kill" when a container is stopped or paused.
    #1934 #1943
  • Error out if built with nokmem and kmemcg limits were requested. #1939
  • Update check-config.sh to be in line with Docker's. #1942
  • Improve handling of kmem and the systemd cgroup driver. #1960
  • Improve resilience of adding setns tasks to cgroups. #1950
  • Remove (broken) detection of .scope for systemd. #1978
  • Fix console hanging with preserve-fds, where not enough fds have actually
    been provided to runc (which is a very common mistake when using
    --preserve-fds). #2000
  • Create bind-mounts when restoring. #1968
  • Fix regression of zombie "runc init" processes. #2023

Thanks to all of the contributors that made this release possible:

With special thanks and well-wishes to Victor Marmol and Rohit Jnagal, who have
both decided to give up their maintainership. Thanks for all of your
contributions over the years, and good luck with your future endeavours!

Signed-off-by: Aleksa Sarai asarai@suse.de

2019-03-28 19:45

v1.0.0~rc6

This is the final feature release of runc before 1.0, rather than 1.0
itself. The reason for tihs is that, during the preparations for this
release (which was originally meant to be 1.0) it was brought up that
there were several spec-compliance problems. One of these was related to
hook ordering, and upon trying to fix them it turns out that many users
(notably the NVIDIA OCI hooks) make use of our incorrect hook ordering.
Many of the proposed solutions to this problem all require a lot of time
and co-ordination, and thus would stall this release indefinitely.

So, the idea is to have an intermediate release which will mark a
freeze-on-everything-except-spec-compliance-bugs. No other changes will
be included pre-1.0 (aside from security patches obviously).

Features:

  • Upgrade to using Go 1.10. #1711
  • Upgrade to CRIU 3.11. #1711 #1864 #1935 #1936
  • Allow for checkpoint-restore into a foreign network namespace. #1849
  • The "type" field for bind-mounts is now ignored. This is important, because
    many users incorrectly assume that "type" defines a bind-mount and not
    "options". Previously you had to set both. #1753 #1845
  • "setgroups=allow" is now possible in rootless mode, but requires the use of
    the privileged newgidmap helper (fully-rootless still requires
    "setgroups=deny"). #1693
  • Rootless mode can now safely ignore a read-only cgroupfs. #1759 #1806
  • Several aspects of rootless mode are now used inside user namespaces. This
    is necessary for a bunch of useful things (such as running Docker inside an
    user namespace), but did cause some breakages. We think they've all been
    fixed -- but if not please submit an issue! #1688 #1808 #1816 #1862
  • Improve kernel.{domain,host}name sysctl handling, to allow the NIS
    domainname to be set from Docker or other callers without an OCI spec
    change. #1827
  • Add documentation for one of the more confusion parts of runc, how terminals
    are handled (including an explanation of --console-socket). All the gory
    details and recommendations are available in docs/terminals.md. #1730
  • Allow /proc to be bind-mounted over (useful for rootless containers). #1832
  • Ignore ENOSYS for keyctl(2) operations. This is necessary to get Docker
    working with LXC under the default seccomp profile (which is what ChromeOS
    uses). #1893
  • Add support for the Intel RDT/MBA resource control system. #1632 #1913
  • Allow building with completely-disabled kmemcg support, to get around
    problems with broken kernels (RHEL 7.5 can oops with kmemcg accounting
    enabled). #1921 #1922 #1930
  • Add support for cgroup namespaces, which in turn fixes a few other issues we
    encountered with the previous code (which could be moving us to a cgroup
    during Go execution). #1916

Fixes:

  • Namespace creation with user namespaces now plays a bit nicer with SELinux
    and IPC (which had a bug where the in-kernel mqueue mount would have the
    wrong tag if using unshare(CLONE_NEWUSER|CLONE_NEWIPC)). This is done to
    avoid future problems with broken kernel integration. #1562
  • Mild refactor of libcontainer/user. #1749
  • Fix null-pointer-exception when no cgroups were set. #1752
  • Various DBus and systemd related changes for the systemd-cgroup driver.
    #1754 #1772 #1776 #1781 #1805 #1917
  • Apply SELinux label to masked directories. #1756
  • Obey the XDG spec and set the sticky bit on runc's root when using
    XDG_RUNTIME_DIR (in rootless mode). #1760
  • Only configure network namespaces if we are creating them. #1777
  • Fix race in runc-exec against a currently-exiting pid1. #1812
  • Forward GOMAXPROCS to try to reduce the number of threads started by 'runc
    init'. Unforunately there's no way to stop Go from spawning new threads so
    this is more of a recommendation. #1830
  • Fix tmpcopyup in cases where /tmp is not a private mount. #1873
  • Whitelist /proc/loadavg for bind-mounting. #1882
  • Protect against deletion of runc state directory with a containerid of "..",
    as well as the addition of other path hardening code. #1883
  • Handle duplicated cgroupfs mountpoint entries more sanely, to make runc work
    on distributions that use-and-abuse shared subtrees. #1817
  • Fix console hanging in several cases. #1895 #1897
  • Lock-to-a-thread during 'runc init' to ensure that that we don't switch
    threads and run within a different SELinux label. #1814
  • Respect cgroupPath when trying to find the cgroupfs mountpoint (which can
    happen in cases where containers are given different cgroupfs mounts). #1872
  • And many other minor changes, many from first-time contributors! #1746 #1748
    #1749 #1784 #1779 #1785 #1796 #1819 #1825 #1836 #1824 #1820 #1838 #1840
    #1841 #1867 #1871 #1855 #1854 #1874 #1868 #1886 #1892 #1858 #1894 #1908
    #1880 #1910 #1915 #1903 #1922 #1926 #1928 #1925 #1911

Fixes (for spec violations):

  • Don't set a container to "running" when exec-ing into it (because it might
    be in the "created" state). #1771
  • oom_score_adj is now no longer modified if it was unspecified in config.json
    (this was a spec violation). #1759
  • Set "status" in hook stdin, as well as switch to using *spec.State to avoid
    JSON-representation drift. #1741

Thanks to all of the contributors that made this release possible:

Signed-off-by: Aleksa Sarai asarai@suse.de

2018-11-21 10:54

v1.0.0~rc5

This is planned to be the final -rc release of runc. While we really
haven't followed the rules for release candidates (with huge features
introduced each release, and with massive gaps between releases) the
hope is that once we've release 1.0.0 we will be much more liberal with
releases in future. Let's see how that pans out. :P

Features:

  • Support cgroups in rootless containers. This is a continuation of the
    previous work done, and allows for users that have specialised setups
    (such as having the LXC pam_cg.so module set up) to use cgroups with
    rootless containers. #1540
  • Add support for newuidmap and newgidmap with rootless containers.
    This is a continuation of some previous work, and allows users that
    have /etc/sub{uid,gid} configured to use the shadow-utils setuid
    helpers. Note that this support doesn't restrict users that don't want
    to use setuid binaries at all. #1529
  • runc will now use a chroot when mount namespaces aren't provided in
    the config.json. While chroot does have its (many) downsides, this
    does allow for specialised configurations to work properly. #1702
  • Expose annotations to hooks, so that the hook can have more direct
    information about the container it is being run against. #1687
  • Add "runc exec --additional-gids" support. #1608
  • Allow more signals to be sent with "runc kill" than are defined by
    Go's syscall package. #1706
  • Emit an error if users try to use MS_PRIVATE with --no-pivot, as that
    is simply not safe. #1606
  • Add support for "unbindable" and "runbindable" as rootfs propagation.
    #1655
  • Implement intelrdt support in runc. #1279 #1590
  • Add support for lazy migration with CRIU. This includes the addition
    of "runc checkpoint httpd" which acts as a remote pagefault request
    server. #1541
  • Add MIPS support. #1475

Fixes:

  • Delay seccomp application as late as possible, to reduce the syscall
    footprint of runc on profiles. #1569

  • Fix --read-only containers with user namespaces, which would
    previously fail under Docker because of privilege problems when trying
    to do the read-only remount. #1572

  • Switch away from stateDirFd entirely. This is an improvement over the
    protections we added for CVE-2016-9962, and protects against many
    other possible container escape bugs. #1570

  • Handle races between "runc start" and "runc delete" over the exec FIFO
    correctly, and avoid blocking "runc start" indefinitely. #1698

  • Correctly generate seccomp profiles that place requirements on syscall
    arguments, as well as multi-argument restrictions. #1616 #1424

  • Prospective patch for remounting of old-root during pivot_root. This
    is intended to solve one of the many "mount leak" bugs that have been
    popping up recently -- caused by lots of container churn and host
    mounts being pinned during container setup. #1500

  • Fix "runc exec" on big-endian architectures. #1727

  • Correct systemd slice expansion to work with cAdvisor. #1722

  • Fix races against systemd cgroup scope creation. #1683

  • Do not wait for signalled processes if libcontainer is running in a
    process that is a subreaper. #1678

  • Remove dependency on libapparmor entirely, and just use
    /proc/$pid/attr directly. #1675

  • Improvements to our integration tests. #1661 #1629 #1528

  • Handle systemd's quirky CPUQuotaPerSecUSec handling in
    fractions-of-a-percent edge-cases. #1651

  • Remove docker/docker import in runc by moving the package to runc.
    #1644

  • Switch from docker's pkg/symlink to cyphar/filepath-securejoin. #1622

  • Enable integration and unit tests on arm64. #1642 #1640

  • Add /proc/scsi to masked paths (mirror of Docker's CVE-2017-16539).
    #1641

  • Add several tests for specconv. #1626 #1619

  • Add more extensive tests for terminal handling. #1357

  • Always write freezer state during retry-loop, to avoid an indefinite
    hang when new tasks are spawned in the container. #1610

  • Create cwd when it doesn't exist in the container. #1604

  • Set initial console size based on process spec, to avoid SIGWINCH
    races where initial console size is completely wrong. #1275

  • Small fixes for static builds. #1579 #1577

  • Use epoll for PTY IO, to avoid issues with systemd's SAK protections.
    #1455

  • Update state.json after a "runc update". #1558

  • Switch to umoci's release scripts, to use a more "standardised" and
    distribution-friendly release scheme. Several makefile-fixes included
    as well. #1554 #1542 #1555

  • Reap "runc:[1:CHILD]" to avoid intermediate zombies building up. #1506

  • Use CRIU's RPC to check the version. #1535

  • Always save own namespace paths rather than the path given during
    start-up, to avoid issues where the path disappears afterwards. #1477

  • Fix that we incorrectly set the owners of devices. This is still (subtly)
    broken in user namespaces, but will be fixed in a future version. #1743

  • Lots of other miscellaneous fixes and cleanups, many of which were
    written by first-time contributors. Thanks for contributing, and
    welcome to the project! #1729 #1724 #1695 #1685 #1703 #1699 #1682
    #1665 #1667 #1669 #1654 #1664 #1660 #1645 #1640 #1621 #1607 #1206
    #1615 #1614 #1453 #1613 #1600 #1599 #1598 #1597 #1593 #1586 #1588
    #1587 #1589 #1575 #1578 #1573 #1561 #1560 #1559 #1556 #1551 #1553
    #1548 #1544 #1545 #1537

Removals:

  • Andrej Vagin stepped down as a maintainer. Thanks for all of your hard
    work Andrej, and have fun working on your other projects! #1543

Thanks to all of the contributors that made this release possible:

Signed-off-by: Aleksa Sarai asarai@suse.de

2018-02-24 09:47

v1.0.0~rc4

Features:

  • runc now supports v1.0.0 of the OCI runtime specification. #1527
  • Rootless containers support has been released. The current state of
    this feature is that it only supports single-{uid,gid} mappings as an
    unprivileged user, and cgroups are completely unsupported. Work is
    being done to improve this. #774
  • Rather than relying on CRIU version nnumbers, actually check if the
    system supports pre-dumping. #1371
  • Allow the PIDs cgroup limit to be updated. #1423
  • Add support for checkpoint/restore of containers with orphaned PTYs
    (which is effectively all containers with terminal=true). #1355
  • Permit prestart hooks to modify the cgroup configuration of a
    container. #1239
  • Add support for a wide variety of mount options. #1460
  • Expose memory.use_hierarchy in MemoryStats. #1378

Fixes:

  • Fix incorrect handling of systems without the freezer cgroup. #1387
  • Many, many changes to switch away from Go's "syscall" stdlib to
    "golang.org/x/sys/unix". #1394 #1398 #1442 #1464 #1467 #1470 #1474
    #1478 #1491 #1482 #1504 #1519 #1530
  • Set cgroup resources when restoring a container. #1399
  • Switch back to using /sbin as the installation directory. #1406
  • Remove the arbitrary container ID length restriction. #1435
  • Make container force deletion ignore non-existent containers. #1451
  • Improve handling of arbitrary cgroup mount locations when populating
    cpuset. #1372
  • Make the SaneTerminal interface public. #1479
  • Fix cases where runc would report a container to be in a "Running"
    state if the init was a zombie or dead. #1489
  • Do not set supplementary groups for numeric users. #1450
  • Fix various issues with the "owner" field in runc-list. #1516
  • Many other miscellaneous fixes, some of which were made by first-time
    contributors. Thanks, and welcome to the project! #1406 #1400 #1365
    #1396 #1402 #1414 #1412 #1408 #1418 #1425 #1428 #1436 #1433 #1438
    #1410 #1447 #1388 #1484 #1481 #1496 #1245 #1524 #1534 #1526 #1533

Removals:

  • Remove any semblance of non-Linux support. #1502
  • We no longer use shfmt for testing. #1510

Thanks to all of the contributors that made this release possible:

Vote-Closed: [Wed Aug 9 05:28:38 UTC 2017]
Vote-Results: [+5 -0 /2]

2017-07-24 10:16

v1.0.0~rc3

Features:

  • Add slice management support to the systemd cgroup driver. Checks are
    done to make sure that systemd supports the feature. #1084
  • Support for readonly mount labels. #1112
  • Add a tmpcopyup mount extension for tmpfs mounts that are mounted over
    already existing directories, allowing for the contents of a volume to
    be copied up transparently. #845
  • Switch our pivot_root usage to no longer require temporary
    directories, improving the state of containters running in entirely
    readonly contexts. #1125 #1148
  • Allow updating of rt_period_us and rt_runtime_us in cpuacct cgroup.
  • Reimplement console handling to use AF_UNIX sockets such that the
    console is created inside the container's (namespaced) devpts
    instance, solving a wide variety of historical pty bugs with runC.
    #1018 #1356
  • Support overlayfs in mounts. #1314
  • Support creating devices with types 'p' and 'u'. #1321
  • Add --preserve-fds=N to create and run commands. #1320
  • Add pre-dump and parent-path to checkpoint. #1001
  • Update to runtime-spec v1.0.0-rc5. #1370

Fixes:

  • Remove check for binding to /. #1090
  • Ensure we log to logrus on command errors. #1089
  • Don't enable kmem limits if they're not specified in the config. #1095
  • Handle cases where specs.Resources.* members would cause null
    dereferences. #1111 #1116
  • Fix bugs in the GetProcessStartTime implementation. #1136
  • Make sysctl config validation checks handle network namespaces more
    gracefully. #1138 #1149
  • Guarantee correct namespace creation ordering. This is part of the
    rootless container patchset, and is also required in certain SELinux
    setups. #977
  • Stop screwing around with '\n' in console output. #1146
  • Fix cpuset.cpu_exclusive handling. #1194
  • Sync HookState with the OCI specification. #1201
  • Split remounting mountpoints and bindmounts, resolving issues with
    mount options being dropped in certain cases. #1222
  • Fix leftover cgroup directory issue. #1196
  • Handle config.Devices and config.MaskPaths in checkpoint. #1110.
  • Don't create combined cgroup subsystem names. #1268
  • Ignore cgroupv2 mountpoints, fixing issues with systemd v232. #1266
  • Race condition when synchronising with children and grandchildren in
    nsexec.c. #1237
  • Fix state checks to no longer depend on _LIBCONTAINER being present in
    the environment, fixing both bugs as well as being part of the
    rootless container patchset. #1317
  • Fix systemd-notify when using different PID namespaces, and allow
    detach+notify socket. #1308
  • Don't fchown when inheriting stdio, which is necessary for rootless
    containers in certain scenarios. #1354
  • Fix cpu.cfs_quota_us being changed when systemd is reloaded. #1344
  • Add devices to whitelist for LXD, to make runC under LXC/LXD work
    better. #1327
  • Many improvements to testing. #1121 #1131 #1132 #1147

Security:

  • Several fixes for CVE-2016-9962. 5d93fed3d27f #1274

Thanks to all of the contributors that made this release possible:

2017-03-21 04:04
Go
1
https://gitee.com/xds2000/runc.git
git@gitee.com:xds2000/runc.git
xds2000
runc
runc

搜索帮助

344bd9b3 5694891 D2dac590 5694891