[LTP] [PATCH v1] madvise11.c:Check loadable module before rmmod
Wei Gao
wegao@suse.com
Fri Mar 10 15:04:07 CET 2023
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/kernel/syscalls/madvise/madvise11.c | 32 +++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/testcases/kernel/syscalls/madvise/madvise11.c b/testcases/kernel/syscalls/madvise/madvise11.c
index 7e291d571..bac077fc8 100644
--- a/testcases/kernel/syscalls/madvise/madvise11.c
+++ b/testcases/kernel/syscalls/madvise/madvise11.c
@@ -33,6 +33,7 @@
#define NUM_LOOPS 5
#define NUM_PAGES 32
#define NUM_PAGES_OFFSET 5
+#define MAX_BUF 4094
/* Needed module to online back memory pages */
#define HW_MODULE "hwpoison_inject"
@@ -291,6 +292,31 @@ static void unpoison_this_pfn(unsigned long pfn, int fd)
SAFE_WRITE(0, fd, pfn_str, strlen(pfn_str));
}
+static int is_loadable_module(const char *modname)
+{
+ char command[MAX_BUF];
+ char line[MAX_BUF];
+ char *token;
+
+ sprintf(command, "lsmod | grep '^%s'", modname);
+
+ FILE *fp = popen(command, "r");
+
+ if (fp == NULL)
+ tst_brk(TBROK, "Popen command %s failed", command);
+
+ if (fgets(line, MAX_BUF, fp) != NULL) {
+ token = strtok(line, " \t\n");
+ if (strcmp(token, modname) == 0) {
+ pclose(fp);
+ return 1;
+ }
+ }
+
+ pclose(fp);
+ return 0;
+}
+
/* Find and open the <debugfs>/hwpoison/unpoison-pfn special file */
static int open_unpoison_pfn(void)
{
@@ -337,6 +363,7 @@ static void unpoison_pfn(char *begin_tag)
unsigned long *pfns;
const char *const cmd_rmmod[] = {"rmmod", HW_MODULE, NULL};
int found_pfns, fd;
+ int is_loadable = -1;
pfns = SAFE_MALLOC(sizeof(pfns) * maximum_pfns * run_iterations);
@@ -351,8 +378,9 @@ static void unpoison_pfn(char *begin_tag)
SAFE_CLOSE(fd);
}
- /* remove hwpoison only if we probed it */
- if (hwpoison_probe)
+ /* remove hwpoison only if we probed it and not built in*/
+ is_loadable = is_loadable_module(HW_MODULE);
+ if (hwpoison_probe && (is_loadable == 1))
SAFE_CMD(cmd_rmmod, NULL, NULL);
}
--
2.35.3
More information about the ltp
mailing list