From 1d1ec39a2726874d3ae24b3a2bcd5cd8318133c1 Mon Sep 17 00:00:00 2001 From: "Shiratori, Takehiro" Date: Mon, 9 Mar 2020 10:59:26 +0900 Subject: [PATCH] exec: Correct wrong "=" to "+=". Change-Id: Iec8c1bb7a12ad7f2e1d4ac07c75482e4d86a0ea2 Refs: #1382 --- kernel/host.c | 2 +- test/issues/1382/1382.sh | 31 ++++ test/issues/1382/README | 27 +++ test/issues/1382/ltp_list.txt | 14 ++ test/issues/1382/result.log | 340 ++++++++++++++++++++++++++++++++++ 5 files changed, 413 insertions(+), 1 deletion(-) create mode 100755 test/issues/1382/1382.sh create mode 100644 test/issues/1382/README create mode 100644 test/issues/1382/ltp_list.txt create mode 100644 test/issues/1382/result.log diff --git a/kernel/host.c b/kernel/host.c index eefd3eb9..490160d0 100644 --- a/kernel/host.c +++ b/kernel/host.c @@ -269,7 +269,7 @@ int prepare_process_ranges_args_envs(struct thread *thread, argenv_page_count += (map_size + PAGE_SIZE - 1) >> PAGE_SHIFT; } else { - argenv_page_count = (envs_len + PAGE_SIZE - 1) >> PAGE_SHIFT; + argenv_page_count += (envs_len + PAGE_SIZE - 1) >> PAGE_SHIFT; } addr = vm->region.map_start - PAGE_SIZE * argenv_page_count; e = addr + PAGE_SIZE * argenv_page_count; diff --git a/test/issues/1382/1382.sh b/test/issues/1382/1382.sh new file mode 100755 index 00000000..08916213 --- /dev/null +++ b/test/issues/1382/1382.sh @@ -0,0 +1,31 @@ +#!/bin/sh +# 1382.sh COPYRIGHT FUJITSU LIMITED 2020 + +. $HOME/.mck_test_config + +BOOTPARAM="-c 12-15 -m 4G@4,4G@5,4G@6,4G@7 -O" +USELTP=1 +FAIL=0 +LTPLIST="${PWD}/ltp_list.txt" + +. ../../common.sh + +echo "issue-1382 test run." + +pushd ${LTPBIN} > /dev/null +while read line +do + ${MCEXEC} ./${line} + if [ $? -ne 0 ]; then + FAIL=1 + fi +done < ${LTPLIST} +popd > /dev/null + +if [ ${FAIL} -eq 1 ]; then + echo "issue-1382 test NG." +else + echo "issue-1382 test OK." +fi + +mcstop diff --git a/test/issues/1382/README b/test/issues/1382/README new file mode 100644 index 00000000..182e5e40 --- /dev/null +++ b/test/issues/1382/README @@ -0,0 +1,27 @@ +/* REDME COPYRIGHT FUJITSU LIMITED 2020 */ + +ltp: thp01: execvpが、argsが大きすぎる際にE2BIGを返さずkernel page faultまたはSEGVを起こす +https://postpeta.pccluster.org/redmine/issues/1382 + +テストセットREADME + +(0) 事前準備 + 1. $HOME/.mck_test_configを用意する + +(1) テスト実行方法 + 1. ./1382.sh + +(2) テスト項目詳細 + + LTPの下記項目を実行し、すべての項目でPASSになることを確認する + - thp01,02 + - execl01 + - execle01 + - execlp01 + - execv01 + - execve01,02,03,05 + - execvp01 + - execveat01,02,03 + + +以上。 diff --git a/test/issues/1382/ltp_list.txt b/test/issues/1382/ltp_list.txt new file mode 100644 index 00000000..8f679c6a --- /dev/null +++ b/test/issues/1382/ltp_list.txt @@ -0,0 +1,14 @@ +thp01 -I 120 +thp02 +execl01 +execle01 +execlp01 +execv01 +execve01 +execve02 +execve03 +execve05 -i 5 -n 32 +execvp01 +execveat01 +execveat02 +execveat03 diff --git a/test/issues/1382/result.log b/test/issues/1382/result.log new file mode 100644 index 00000000..174f6be1 --- /dev/null +++ b/test/issues/1382/result.log @@ -0,0 +1,340 @@ +mcstop+release.sh ... done +mcreboot.sh -c 12-15 -m 4G@4,4G@5,4G@6,4G@7 -O ... done +issue-1382 test run. +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +thp01.c:123: INFO: Using 8192 args of size 65536 +thp01.c:81: INFO: left: 4096, right: 8192, mid: 4096 +thp01.c:81: INFO: left: 6144, right: 8192, mid: 6144 +thp01.c:81: INFO: left: 7168, right: 8192, mid: 7168 +thp01.c:81: INFO: left: 7680, right: 8192, mid: 7680 +thp01.c:81: INFO: left: 7936, right: 8192, mid: 7936 +thp01.c:81: INFO: left: 8064, right: 8192, mid: 8064 +thp01.c:81: INFO: left: 8128, right: 8192, mid: 8128 +thp01.c:81: INFO: left: 8160, right: 8192, mid: 8160 +thp01.c:81: INFO: left: 8176, right: 8192, mid: 8176 +thp01.c:81: INFO: left: 8184, right: 8192, mid: 8184 +thp01.c:81: INFO: left: 8188, right: 8192, mid: 8188 +thp01.c:81: INFO: left: 8190, right: 8192, mid: 8190 +thp01.c:81: INFO: left: 8191, right: 8192, mid: 8191 +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. +thp01.c:98: PASS: system didn't crash. + +Summary: +passed 33 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +thp02.c:75: INFO: mremap (0x100000600000-0x100000df0000) to (0x100001200000-0x1000019f0000) +thp02.c:75: INFO: mremap (0x100000600000-0x100000df0000) to (0x100001210000-0x100001a00000) +thp02.c:75: INFO: mremap (0x100000610000-0x100000e00000) to (0x100001200000-0x1000019f0000) +thp02.c:75: INFO: mremap (0x100000610000-0x100000e00000) to (0x100001210000-0x100001a00000) +thp02.c:99: PASS: Still alive. + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execl01_child.c:20: PASS: execl01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execle01_child.c:34: PASS: execle01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execlp01_child.c:20: PASS: execlp01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execv01_child.c:23: PASS: execv01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execve01_child.c:34: PASS: execve01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execve02.c:54: PASS: execve() failed expectedly: EACCES (13) + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execve03.c:124: PASS: execve failed as expected: ENAMETOOLONG (36) +execve03.c:124: PASS: execve failed as expected: ENOENT (2) +execve03.c:124: PASS: execve failed as expected: ENOTDIR (20) +execve03.c:124: PASS: execve failed as expected: EFAULT (14) +execve03.c:124: PASS: execve failed as expected: EACCES (13) +execve03.c:124: PASS: execve failed as expected: ENOEXEC (8) + +Summary: +passed 6 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' +execve_child.c:22: PASS: argv[1] is canary, expected 'canary' + +Summary: +passed 160 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execvp01_child.c:20: PASS: execvp01_child executed + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execveat_child.c:17: PASS: execveat_child run as expected +execveat_child.c:17: PASS: execveat_child run as expected +execveat_child.c:17: PASS: execveat_child run as expected +execveat_child.c:17: PASS: execveat_child run as expected + +Summary: +passed 4 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execveat02.c:64: PASS: execveat() fails as expected: EBADF (9) +execveat02.c:64: PASS: execveat() fails as expected: EINVAL (22) +execveat02.c:64: PASS: execveat() fails as expected: ELOOP (40) +execveat02.c:64: PASS: execveat() fails as expected: ENOTDIR (20) + +Summary: +passed 4 +failed 0 +skipped 0 +warnings 0 +tst_device.c:87: INFO: Found free device 1 '/dev/loop1' +tst_mkfs.c:90: INFO: Formatting /dev/loop1 with ext2 opts='' extra opts='' +mke2fs 1.44.3 (10-July-2018) +tst_test.c:1217: INFO: Timeout per run is 0h 05m 00s +execveat_child.c:17: PASS: execveat_child run as expected + +Summary: +passed 1 +failed 0 +skipped 0 +warnings 0 +issue-1382 test OK. +mcstop+release.sh ... done