mirror of
https://github.com/torvalds/linux
synced 2024-10-01 17:00:41 +00:00
selftests/mm:fix test_prctl_fork_exec return failure
After calling fork() in test_prctl_fork_exec(), the global variable ksm_full_scans_fd is initialized to 0 in the child process upon entering the main function of ./ksm_functional_tests. In the function call chain test_child_ksm() -> __mmap_and_merge_range -> ksm_merge-> ksm_get_full_scans, start_scans = ksm_get_full_scans() will return an error. Therefore, the value of ksm_full_scans_fd needs to be initialized before calling test_child_ksm in the child process. Link: https://lkml.kernel.org/r/20240617052934.5834-1-shechenglong001@gmail.com Signed-off-by: aigourensheng <shechenglong001@gmail.com> Acked-by: David Hildenbrand <david@redhat.com> Cc: Shuah Khan <shuah@kernel.org> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
ff202303c3
commit
8b8546d298
|
@ -656,24 +656,8 @@ static void test_prot_none(void)
|
|||
munmap(map, size);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
static void init_global_file_handles(void)
|
||||
{
|
||||
unsigned int tests = 8;
|
||||
int err;
|
||||
|
||||
if (argc > 1 && !strcmp(argv[1], FORK_EXEC_CHILD_PRG_NAME)) {
|
||||
exit(test_child_ksm());
|
||||
}
|
||||
|
||||
#ifdef __NR_userfaultfd
|
||||
tests++;
|
||||
#endif
|
||||
|
||||
ksft_print_header();
|
||||
ksft_set_plan(tests);
|
||||
|
||||
pagesize = getpagesize();
|
||||
|
||||
mem_fd = open("/proc/self/mem", O_RDWR);
|
||||
if (mem_fd < 0)
|
||||
ksft_exit_fail_msg("opening /proc/self/mem failed\n");
|
||||
|
@ -688,8 +672,30 @@ int main(int argc, char **argv)
|
|||
ksft_exit_skip("open(\"/proc/self/pagemap\") failed\n");
|
||||
proc_self_ksm_stat_fd = open("/proc/self/ksm_stat", O_RDONLY);
|
||||
proc_self_ksm_merging_pages_fd = open("/proc/self/ksm_merging_pages",
|
||||
O_RDONLY);
|
||||
O_RDONLY);
|
||||
ksm_use_zero_pages_fd = open("/sys/kernel/mm/ksm/use_zero_pages", O_RDWR);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
unsigned int tests = 8;
|
||||
int err;
|
||||
|
||||
if (argc > 1 && !strcmp(argv[1], FORK_EXEC_CHILD_PRG_NAME)) {
|
||||
init_global_file_handles();
|
||||
exit(test_child_ksm());
|
||||
}
|
||||
|
||||
#ifdef __NR_userfaultfd
|
||||
tests++;
|
||||
#endif
|
||||
|
||||
ksft_print_header();
|
||||
ksft_set_plan(tests);
|
||||
|
||||
pagesize = getpagesize();
|
||||
|
||||
init_global_file_handles();
|
||||
|
||||
test_unmerge();
|
||||
test_unmerge_zero_pages();
|
||||
|
|
Loading…
Reference in a new issue