Commit 36c4cba9 authored by Kirill Tkhai's avatar Kirill Tkhai Committed by Pavel Emelyanov

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: 's avatarKirill Tkhai <ktkhai@odin.com>
Acked-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 505896e6
...@@ -45,4 +45,8 @@ ...@@ -45,4 +45,8 @@
#define PROC_SUPER_MAGIC 0x9fa0 #define PROC_SUPER_MAGIC 0x9fa0
#endif #endif
#ifndef BINFMTFS_MAGIC
#define BINFMTFS_MAGIC 0x42494e4d
#endif
#endif /* __CR_FS_MAGIC_H__ */ #endif /* __CR_FS_MAGIC_H__ */
...@@ -32,6 +32,7 @@ extern struct kerndat_s kdat; ...@@ -32,6 +32,7 @@ extern struct kerndat_s kdat;
enum { enum {
KERNDAT_FS_STAT_DEVPTS, KERNDAT_FS_STAT_DEVPTS,
KERNDAT_FS_STAT_DEVTMPFS, KERNDAT_FS_STAT_DEVTMPFS,
KERNDAT_FS_STAT_BINFMT_MISC,
KERNDAT_FS_STAT_MAX KERNDAT_FS_STAT_MAX
}; };
......
...@@ -92,6 +92,11 @@ static dev_t get_host_dev(unsigned int which) ...@@ -92,6 +92,11 @@ static dev_t get_host_dev(unsigned int which)
.path = "/dev", .path = "/dev",
.magic = TMPFS_MAGIC, .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) { if (which >= KERNDAT_FS_STAT_MAX) {
......
...@@ -1291,6 +1291,11 @@ static int devtmpfs_restore(struct mount_info *pm) ...@@ -1291,6 +1291,11 @@ static int devtmpfs_restore(struct mount_info *pm)
return ret; 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) static int parse_binfmt_misc_entry(struct bfd *f, BinfmtMiscEntry *bme)
{ {
while (1) { while (1) {
...@@ -1375,9 +1380,13 @@ err: ...@@ -1375,9 +1380,13 @@ err:
static int binfmt_misc_dump(struct mount_info *pm) static int binfmt_misc_dump(struct mount_info *pm)
{ {
struct cr_img *img; struct cr_img *img;
int fd, ret = -1;
struct dirent *de; struct dirent *de;
DIR *fdir = NULL; DIR *fdir = NULL;
int fd, ret;
ret = binfmt_misc_virtual(pm);
if (ret <= 0)
return ret;
fd = open_mountpoint(pm); fd = open_mountpoint(pm);
if (fd < 0) if (fd < 0)
...@@ -1389,6 +1398,7 @@ static int binfmt_misc_dump(struct mount_info *pm) ...@@ -1389,6 +1398,7 @@ static int binfmt_misc_dump(struct mount_info *pm)
return -1; return -1;
} }
ret = -1;
img = open_image(CR_FD_BINFMT_MISC, O_DUMP, pm->s_dev); img = open_image(CR_FD_BINFMT_MISC, O_DUMP, pm->s_dev);
if (!img) if (!img)
goto out; goto out;
......
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