diff --git a/mount.c b/mount.c index b80ff478a..68a5f367a 100644 --- a/mount.c +++ b/mount.c @@ -179,7 +179,7 @@ static struct mount_info *mnt_build_tree(struct mount_info *list) return tree; } -DIR *open_mountpoint(struct mount_info *pm) +static DIR *open_mountpoint(struct mount_info *pm) { int fd, ret; char path[PATH_MAX + 1]; @@ -222,7 +222,7 @@ DIR *open_mountpoint(struct mount_info *pm) return fdir; } -int close_mountpoint(DIR *dfd) +static int close_mountpoint(DIR *dfd) { if (closedir(dfd)) { pr_perror("Unable to close directory"); @@ -231,11 +231,42 @@ int close_mountpoint(DIR *dfd) return 0; } +static int binfmt_misc_dump(struct mount_info *pm) +{ + int ret = -1; + struct dirent *de; + DIR *fdir = NULL; + + fdir = open_mountpoint(pm); + if (fdir == NULL) + return -1; + + while ((de = readdir(fdir))) { + if (!strcmp(de->d_name, ".")) + continue; + if (!strcmp(de->d_name, "..")) + continue; + if (!strcmp(de->d_name, "register")) + continue; + if (!strcmp(de->d_name, "status")) + continue; + + pr_err("binfmt_misc isn't empty: %s\n", de->d_name); + goto out; + } + + ret = 0; +out: + close_mountpoint(fdir); + return ret; +} + static struct fstype fstypes[] = { { "unsupported" }, { "proc" }, { "sysfs" }, { "devtmpfs" }, + { "binfmt_misc", binfmt_misc_dump }, }; struct fstype *find_fstype_by_name(char *fst) diff --git a/test/zdtm/live/static/mountpoints.c b/test/zdtm/live/static/mountpoints.c index 6f7afd69e..303500ce1 100644 --- a/test/zdtm/live/static/mountpoints.c +++ b/test/zdtm/live/static/mountpoints.c @@ -78,6 +78,11 @@ done: fail("Can't mount proc"); return 1; } + if (mount("none", MPTS_ROOT"/kernel/sys/fs/binfmt_misc", + "binfmt_misc", 0, "") < 0) { + fail("Can't mount proc"); + return 1; + } fd = open(MPTS_ROOT"/kernel/meminfo", O_RDONLY); if (fd == -1)