[CRIU] [PATCH] binfmt_misc: Skip dumping if it's not virtual
Andrew Vagin
avagin at virtuozzo.com
Tue Dec 22 07:11:38 PST 2015
On Mon, Dec 21, 2015 at 03:19:28PM +0300, Kirill Tkhai wrote:
> Similar to devtmpfs and devpts, skip binfmt_misc
> mount if it's not virtual.
>
Acked-by: Andrew Vagin <avagin at virtuozzo.com>
> Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
> ---
> include/fs-magic.h | 4 ++++
> include/kerndat.h | 1 +
> kerndat.c | 5 +++++
> mount.c | 12 +++++++++++-
> 4 files changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/include/fs-magic.h b/include/fs-magic.h
> index 777d736..d6e9e54 100644
> --- a/include/fs-magic.h
> +++ b/include/fs-magic.h
> @@ -45,4 +45,8 @@
> #define PROC_SUPER_MAGIC 0x9fa0
> #endif
>
> +#ifndef BINFMTFS_MAGIC
> +#define BINFMTFS_MAGIC 0x42494e4d
> +#endif
> +
> #endif /* __CR_FS_MAGIC_H__ */
> diff --git a/include/kerndat.h b/include/kerndat.h
> index e76b0d2..076804c 100644
> --- a/include/kerndat.h
> +++ b/include/kerndat.h
> @@ -32,6 +32,7 @@ extern struct kerndat_s kdat;
> enum {
> KERNDAT_FS_STAT_DEVPTS,
> KERNDAT_FS_STAT_DEVTMPFS,
> + KERNDAT_FS_STAT_BINFMT_MISC,
>
> KERNDAT_FS_STAT_MAX
> };
> diff --git a/kerndat.c b/kerndat.c
> index 5b9df83..4605470 100644
> --- a/kerndat.c
> +++ b/kerndat.c
> @@ -92,6 +92,11 @@ static dev_t get_host_dev(unsigned int which)
> .path = "/dev",
> .magic = TMPFS_MAGIC,
> },
> + [KERNDAT_FS_STAT_BINFMT_MISC] = {
> + .name = "binfmt_misc",
> + .path = "/proc/sys/fs/binfmt_misc",
> + .magic = BINFMTFS_MAGIC,
> + },
> };
>
> if (which >= KERNDAT_FS_STAT_MAX) {
> diff --git a/mount.c b/mount.c
> index 2301b1f..8eedf5a 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -1291,6 +1291,11 @@ static int devtmpfs_restore(struct mount_info *pm)
> return ret;
> }
>
> +static int binfmt_misc_virtual(struct mount_info *pm)
> +{
> + return kerndat_fs_virtualized(KERNDAT_FS_STAT_BINFMT_MISC, pm->s_dev);
> +}
> +
> static int parse_binfmt_misc_entry(struct bfd *f, BinfmtMiscEntry *bme)
> {
> while (1) {
> @@ -1375,9 +1380,13 @@ static int dump_binfmt_misc_entry(int dfd, char *name, struct cr_img *img)
> static int binfmt_misc_dump(struct mount_info *pm)
> {
> struct cr_img *img;
> - int fd, ret = -1;
> struct dirent *de;
> DIR *fdir = NULL;
> + int fd, ret;
> +
> + ret = binfmt_misc_virtual(pm);
> + if (ret <= 0)
> + return ret;
>
> fd = open_mountpoint(pm);
> if (fd < 0)
> @@ -1389,6 +1398,7 @@ static int binfmt_misc_dump(struct mount_info *pm)
> return -1;
> }
>
> + ret = -1;
> img = open_image(CR_FD_BINFMT_MISC, O_DUMP, pm->s_dev);
> if (!img)
> goto out;
>
More information about the CRIU
mailing list