binfmt_misc: Skip dumping if it's not virtual

Similar to devtmpfs and devpts, skip binfmt_misc
mount if it's not virtual.

Signed-off-by: Kirill Tkhai <ktkhai@odin.com>
Acked-by: Andrew Vagin <avagin@virtuozzo.com>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
Kirill Tkhai 2015-12-21 15:19:00 +03:00 committed by Pavel Emelyanov
parent 505896e664
commit 36c4cba986
4 changed files with 21 additions and 1 deletions

View file

@ -45,4 +45,8 @@
#define PROC_SUPER_MAGIC 0x9fa0
#endif
#ifndef BINFMTFS_MAGIC
#define BINFMTFS_MAGIC 0x42494e4d
#endif
#endif /* __CR_FS_MAGIC_H__ */

View file

@ -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
};

View file

@ -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) {

12
mount.c
View file

@ -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 @@ err:
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;