exec: Correct wrong "=" to "+=".

Change-Id: Iec8c1bb7a12ad7f2e1d4ac07c75482e4d86a0ea2
Refs: #1382
This commit is contained in:
Shiratori, Takehiro
2020-03-09 10:59:26 +09:00
committed by Masamichi Takagi
parent 0a4e6b49b4
commit 1d1ec39a27
5 changed files with 413 additions and 1 deletions

View File

@ -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;

31
test/issues/1382/1382.sh Executable file
View File

@ -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

27
test/issues/1382/README Normal file
View File

@ -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
以上。

View File

@ -0,0 +1,14 @@
thp01 -I 120
thp02
execl01
execle01
execlp01
execv01
execve01
execve02
execve03
execve05 -i 5 -n 32
execvp01
execveat01
execveat02
execveat03

340
test/issues/1382/result.log Normal file
View File

@ -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