Unverified Commit aab6e3eb by Stéphane Graber Committed by GitHub

Merge pull request #3083 from brauner/2019-07-07/mount_api

lxccontainer: properly cleanup on mount injection failure
parents 9c238bc6 1f77c35e
...@@ -5117,33 +5117,37 @@ static int do_lxcapi_mount(struct lxc_container *c, const char *source, ...@@ -5117,33 +5117,37 @@ static int do_lxcapi_mount(struct lxc_container *c, const char *source,
suff = strrchr(template, '/'); suff = strrchr(template, '/');
if (!suff) if (!suff)
_exit(EXIT_FAILURE); goto cleanup_target_in_child;
ret = snprintf(path, sizeof(path), "%s%s", c->lxc_conf->shmount.path_cont, suff); ret = snprintf(path, sizeof(path), "%s%s", c->lxc_conf->shmount.path_cont, suff);
if (ret < 0 || (size_t)ret >= sizeof(path)) { if (ret < 0 || (size_t)ret >= sizeof(path)) {
SYSERROR("Error writing container mountpoint name"); SYSERROR("Error writing container mountpoint name");
_exit(EXIT_FAILURE); goto cleanup_target_in_child;
} }
ret = mount(path, target, NULL, MS_MOVE | MS_REC, NULL); ret = mount(path, target, NULL, MS_MOVE | MS_REC, NULL);
if (ret < 0) { if (ret < 0) {
SYSERROR("Failed to move the mount from \"%s\" to \"%s\"", path, target); SYSERROR("Failed to move the mount from \"%s\" to \"%s\"", path, target);
_exit(EXIT_FAILURE); goto cleanup_target_in_child;
} }
TRACE("Moved mount from \"%s\" to \"%s\"", path, target); TRACE("Moved mount from \"%s\" to \"%s\"", path, target);
_exit(EXIT_SUCCESS); _exit(EXIT_SUCCESS);
cleanup_target_in_child:
(void)remove(target);
_exit(EXIT_FAILURE);
} }
ret = wait_for_pid(pid); ret = wait_for_pid(pid);
if (ret < 0) { if (ret < 0)
SYSERROR("Wait for the child with pid %ld failed", (long) pid); SYSERROR("Wait for the child with pid %ld failed", (long)pid);
goto out; else
} ret = 0;
ret = 0; if (umount2(template, MNT_DETACH))
SYSWARN("Failed to remove temporary mount \"%s\"", template);
(void)umount2(template, MNT_DETACH);
if (is_dir) if (is_dir)
(void)rmdir(template); (void)rmdir(template);
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment