[CRIU] [PATCH] tmpfs: don't try to dump mountpoint at 0 fd
Andrew Vagin
avagin at virtuozzo.com
Thu Jan 21 18:27:17 PST 2016
On Tue, Jan 19, 2016 at 09:15:05AM -0700, Tycho Andersen wrote:
> If we happen to get 0 as the fd for the mountpoint, there is an error:
>
> (00.280617) Dumping task cwd id 0x2b root id 0x2b
> (00.280697) mnt: Dumping mountpoints
> (00.280702) mnt: 132: 34:/ @ ./run/lock
> (00.280714) mnt: Path `/run/lock' resolved to `./run/lock' mountpoint
> tar: /proc/self/fd/0: Cannot open: Not a directory
> tar: Error is not recoverable: exiting now
> (00.283581) Error (util.c:666): exited, status=2
> (00.283598) Error (mount.c:1220): mnt: Can't dump tmpfs content
>
> Instead, let's not ever use 0 as the mountpoint fd.
>
> Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> ---
> mount.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/mount.c b/mount.c
> index 9d5667a..ae7bfae 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -1190,6 +1190,13 @@ static int tmpfs_dump(struct mount_info *pm)
> if (fd < 0)
> return -1;
>
> + /* if fd happens to be 0 here, we need to move it to something
> + * non-zero, because cr_system_userns closes STDIN_FILENO as we are not
> + * interested in passing stdin to tar.
> + */
> + if (move_img_fd(&fd, STDIN_FILENO) < 0)
> + goto out;
Should we handle a case when fd is equal to STDOUT_FILENO or
STDERR_FILENO?
> +
> if (fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) & ~FD_CLOEXEC) == -1) {
> pr_perror("Can not drop FD_CLOEXEC");
> goto out;
> --
> 2.7.0.rc3
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list