diff --git a/CHANGELOG.md b/CHANGELOG.md index cffc9e2f6..8f58dbee4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * When Intel RDT feature is not available, its initialization is skipped, resulting in slightly faster `runc exec` and `runc run`. (#3306) +### Fixed + + * In case the runc binary resides on tmpfs, `runc init` no longer re-execs + itself twice. (#3342) + ## [1.1.0] - 2022-01-14 > A plan depends as much upon execution as it does upon concept. diff --git a/libcontainer/nsenter/cloned_binary.c b/libcontainer/nsenter/cloned_binary.c index 4268ebda9..73c0a27b5 100644 --- a/libcontainer/nsenter/cloned_binary.c +++ b/libcontainer/nsenter/cloned_binary.c @@ -137,7 +137,7 @@ static void *must_realloc(void *ptr, size_t size) */ static int is_self_cloned(void) { - int fd, ret, is_cloned = 0; + int fd, is_cloned = 0; struct stat statbuf = { }; struct statfs fsbuf = { }; @@ -153,11 +153,9 @@ static int is_self_cloned(void) * sharing it isn't a bad thing -- and an admin could bind-mount a sealed * memfd to /usr/bin/runc to allow re-use). */ - ret = fcntl(fd, F_GET_SEALS); - if (ret >= 0) { - is_cloned = (ret == RUNC_MEMFD_SEALS); + is_cloned = (fcntl(fd, F_GET_SEALS) == RUNC_MEMFD_SEALS); + if (is_cloned) goto out; - } /* * All other forms require CLONED_BINARY_ENV, since they are potentially