lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 21 Oct 2022 15:10:51 +0800
From:   Zhao Gongyi <zhaogongyi@...wei.com>
To:     <linux-kselftest@...r.kernel.org>, <linux-kernel@...r.kernel.org>
CC:     <keescook@...omium.org>, <luto@...capital.net>, <wad@...omium.org>,
        <shuah@...nel.org>, <zhaogongyi@...wei.com>,
        <cristian.marussi@....com>
Subject: [PATCH -next 1/2] selftests/mincore: Add checking of block dev for TEST(check_file_mmap)

TEST(check_file_mmap) will fail when we run the test on tmpfs and report:
  mincore_selftest.c:261:check_file_mmap:Expected ra_pages (0) > 0 (0)
  mincore_selftest.c:262:check_file_mmap:No read-ahead pages found in memory

For some embaded system, maybe there is only tmpfs file system exist,
run the test will fail, or we install the test on a filesystem that
has no backend, also it will fail as unepected.

So add a checking of block dev for the filesystem at first.

Signed-off-by: Zhao Gongyi <zhaogongyi@...wei.com>
---
 .../selftests/mincore/mincore_selftest.c      | 53 +++++++++++++++++++
 1 file changed, 53 insertions(+)

diff --git a/tools/testing/selftests/mincore/mincore_selftest.c b/tools/testing/selftests/mincore/mincore_selftest.c
index 4c88238fc8f0..287351a599a2 100644
--- a/tools/testing/selftests/mincore/mincore_selftest.c
+++ b/tools/testing/selftests/mincore/mincore_selftest.c
@@ -14,6 +14,9 @@
 #include <sys/mman.h>
 #include <string.h>
 #include <fcntl.h>
+#include <mntent.h>
+#include <sys/stat.h>
+#include <linux/fs.h>

 #include "../kselftest.h"
 #include "../kselftest_harness.h"
@@ -173,6 +176,43 @@ TEST(check_huge_pages)
 	munmap(addr, page_size);
 }

+static struct mntent* find_mount_point(const char *name)
+{
+	struct stat s;
+	FILE *mtab_fp;
+	struct mntent *mountEntry;
+	dev_t devno_of_name;
+
+	if (stat(name, &s) != 0)
+		return NULL;
+
+	devno_of_name = s.st_dev;
+
+	mtab_fp = setmntent("/proc/mounts", "r");
+	if (!mtab_fp)
+		return NULL;
+
+	while ((mountEntry = getmntent(mtab_fp)) != NULL) {
+		if (strcmp(name, mountEntry->mnt_dir) == 0
+			|| strcmp(name, mountEntry->mnt_fsname) == 0) {
+			break;
+		}
+
+		if (mountEntry->mnt_fsname[0] == '/'
+			&& stat(mountEntry->mnt_fsname, &s) == 0
+			&& s.st_rdev == devno_of_name) {
+			break;
+		}
+
+		if (stat(mountEntry->mnt_dir, &s) == 0
+				&& s.st_dev == devno_of_name) {
+			break;
+		}
+	}
+	endmntent(mtab_fp);
+
+	return mountEntry;
+}

 /*
  * Test mincore() behavior on a file-backed page.
@@ -194,6 +234,19 @@ TEST(check_file_mmap)
 	int fd;
 	int i;
 	int ra_pages = 0;
+	struct stat s;
+	struct mntent *mount_entry;
+
+	mount_entry = find_mount_point(".");
+	ASSERT_NE(NULL, mount_entry) {
+		TH_LOG("Find mount point of '.' failed");
+	}
+
+	ASSERT_EQ(0, (stat(mount_entry->mnt_fsname, &s) != 0
+		|| !S_ISBLK(s.st_mode))) {
+		TH_LOG("There is no a block dev on mount point, "
+			"test is not supported");
+	}

 	page_size = sysconf(_SC_PAGESIZE);
 	vec_size = FILE_SIZE / page_size;
--
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ