fix: fork's race-condition caused by child and grand-child

Refs: #1329
Change-Id: Ia2d7641d1203f40155fef5db718d1bb2c583c1c5
This commit is contained in:
Ken Sato
2019-12-20 11:24:14 +09:00
committed by Masamichi Takagi
parent 5b26fe2956
commit 911b07f507
16 changed files with 2236 additions and 361 deletions

View File

@ -4120,19 +4120,22 @@ gettid_out:
}
fork_child_sync_pipe:
sem_post(&fs->sem);
sem_destroy(&fs->sem);
if (fs->status)
exit(1);
/* clear fork_sync inherited from parent */
for (fp = fork_sync_top; fp;) {
fb = fp->next;
if (fp->fs && fp->fs != fs)
if (fp->fs && fp->fs != fs) {
munmap(fp->fs, sizeof(struct fork_sync));
}
free(fp);
fp = fb;
}
fork_sync_top = NULL;
sem_post(&fs->sem);
if (fs->status) {
exit(1);
}
pthread_mutex_init(&fork_sync_mutex, NULL);
/* TODO: does the forked thread run in a pthread context? */
@ -4145,6 +4148,7 @@ fork_child_sync_pipe:
exit(1);
}
sem_destroy(&fs->sem);
munmap(fs, sizeof(struct fork_sync));
#if 1 /* debug : thread killed by exit_group() are still joinable? */
join_all_threads();

View File

@ -1,172 +0,0 @@
i*** C1324+1329T01 start *******************************
[OK] fork is successful
[OK] POKED value is correct!!
[OK] child exited normaly
*** C1324+1329T01 PASSED ******************************
*** C1324+1329T02 start *******************************
[OK] sigaltstack 1st is successful
[OK] sigaltstack 2nd is successful
*** C1324+1329T02 PASSED ******************************
*** C1324+1329T03 start *******************************
[OK] value read by proc_mem is correct
*** C1324+1329T03 PASSED ******************************
*** C1324+1329T04 start *******************************
fork14 1 TPASS : fork failed as expected.
*** C1324+1329T04 PASSED (1)
*** C1324+1329T05 start *******************************
fork01 1 TPASS : fork() returned 35497
fork01 2 TPASS : child pid and fork() return agree: 35497
*** C1324+1329T05 PASSED (2)
*** C1324+1329T06 start *******************************
fork02 0 TINFO : Inside parent
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
*** C1324+1329T06 PASSED (1)
*** C1324+1329T07 start *******************************
fork03 0 TINFO : process id in parent of child from fork : 35581
fork03 1 TPASS : test 1 PASSED
*** C1324+1329T07 PASSED (1)
*** C1324+1329T08 start *******************************
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
*** C1324+1329T08 PASSED (3)
*** C1324+1329T09 start *******************************
fork05 0 TINFO : %fs test only for ix86
*** C1324+1329T09 PASSED (0)
*** C1324+1329T10 start *******************************
fork06 0 TINFO : tries 1000
fork06 0 TINFO : successes 1000
fork06 0 TINFO : failures 0
fork06 0 TINFO : There were no children to wait for
*** C1324+1329T10 PASSED (0)
*** C1324+1329T11 start *******************************
fork07 0 TINFO : Forking 100 children
fork07 0 TINFO : Forked all 100 children, now collecting
fork07 0 TINFO : Collected all 100 children
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
*** C1324+1329T11 PASSED (1)
*** C1324+1329T12 start *******************************
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : second child got char: b
fork08 1 TPASS : Test passed in childnumber 2
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : parent forksval: 2
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 1 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 2 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 3 TPASS : parent test PASSED
fork08 0 TINFO : Number of processes forked is 2
*** C1324+1329T12 PASSED (4)
*** C1324+1329T13 start *******************************
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 0 TINFO : Child opened new file #1023
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 1 TPASS : test 1 PASSED
*** C1324+1329T13 PASSED (1)
*** C1324+1329T14 start *******************************
fork10 0 TINFO : fork child A
fork10 1 TPASS : test 1 PASSED
*** C1324+1329T14 PASSED (1)
*** C1324+1329T15 start *******************************
fork11 1 TPASS : fork test passed, 100 processes
*** C1324+1329T15 PASSED (1)
*** C1324+1329T16 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl01.c:50: PASS: msgctl(IPC_STAT)
msgctl01.c:53: PASS: msg_stime = 0
msgctl01.c:58: PASS: msg_rtime = 0
msgctl01.c:64: PASS: msg_ctime = 1574829452, expected 1574829452
msgctl01.c:71: PASS: msg_qnum = 0
msgctl01.c:76: PASS: msg_qbytes = 16384
msgctl01.c:81: PASS: msg_lspid = 0
msgctl01.c:86: PASS: msg_lrpid = 0
msgctl01.c:91: PASS: msg_perm.__key == 1627857601
msgctl01.c:98: PASS: msg_perm.uid = 0
msgctl01.c:105: PASS: msg_perm.gid = 0
msgctl01.c:112: PASS: msg_perm.cuid = 0
msgctl01.c:119: PASS: msg_perm.cgid = 0
msgctl01.c:126: PASS: msg_perm.mode = 0660
Summary:
passed 14
failed 0
skipped 0
warnings 0
*** C1324+1329T16 PASSED (14)
*** C1324+1329T17 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl02.c:47: PASS: msgctl(IPC_SET) msg_qbytes - 1
msgctl02.c:54: PASS: msg_qbytes = 16383
Summary:
passed 2
failed 0
skipped 0
warnings 0
*** C1324+1329T17 PASSED (2)
*** C1324+1329T18 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl03.c:40: PASS: msgctl(IPC_RMID)
msgctl03.c:44: PASS: msgctl(IPC_STAT): EINVAL
Summary:
passed 2
failed 0
skipped 0
warnings 0
*** C1324+1329T18 PASSED (2)
*** C1324+1329T19 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl04.c:72: PASS: msgctl(131073, 2, 0x432e60): EACCES
msgctl04.c:72: PASS: msgctl(163842, 2, 0xffffffffffffffff): EFAULT
msgctl04.c:72: PASS: msgctl(163842, 1, 0xffffffffffffffff): EFAULT
msgctl04.c:72: PASS: msgctl(163842, -1, 0x432e60): EINVAL
msgctl04.c:72: PASS: msgctl(-1, 2, 0x432e60): EINVAL
msgctl04.c:72: PASS: msgctl(-1, 1, 0x432e60): EINVAL
msgctl04.c:72: PASS: msgctl(98304, 0, (nil)): EPERM
Summary:
passed 7
failed 0
skipped 0
warnings 0
*** C1324+1329T19 PASSED (7)
*** C1324+1329T20 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl12.c:54: PASS: msgctl() test IPC_INFO succeeded
msgctl12.c:54: PASS: msgctl() test MSG_INFO succeeded
msgctl12.c:54: PASS: msgctl() test MSG_STAT succeeded
Summary:
passed 3
failed 0
skipped 0
warnings 0
*** C1324+1329T20 PASSED (3)

View File

@ -1,172 +0,0 @@
*** C1324+1329T01 start *******************************
[OK] fork is successful
[OK] POKED value is correct!!
[OK] child exited normaly
*** C1324+1329T01 PASSED ******************************
*** C1324+1329T02 start *******************************
[OK] sigaltstack 1st is successful
[OK] sigaltstack 2nd is successful
*** C1324+1329T02 PASSED ******************************
*** C1324+1329T03 start *******************************
[OK] value read by proc_mem is correct
*** C1324+1329T03 PASSED ******************************
*** C1324+1329T04 start *******************************
fork14 1 TPASS : fork failed as expected.
*** C1324+1329T04 PASSED (1)
*** C1324+1329T05 start *******************************
fork01 1 TPASS : fork() returned 12305
fork01 2 TPASS : child pid and fork() return agree: 12305
*** C1324+1329T05 PASSED (2)
*** C1324+1329T06 start *******************************
fork02 0 TINFO : Inside parent
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
*** C1324+1329T06 PASSED (1)
*** C1324+1329T07 start *******************************
fork03 0 TINFO : process id in parent of child from fork : 12365
fork03 1 TPASS : test 1 PASSED
*** C1324+1329T07 PASSED (1)
*** C1324+1329T08 start *******************************
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm-256color
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
*** C1324+1329T08 PASSED (3)
*** C1324+1329T09 start *******************************
fork05 0 TINFO : %fs test only for ix86
*** C1324+1329T09 PASSED (0)
*** C1324+1329T10 start *******************************
fork06 0 TINFO : tries 1000
fork06 0 TINFO : successes 1000
fork06 0 TINFO : failures 0
fork06 0 TINFO : There were no children to wait for
*** C1324+1329T10 PASSED (0)
*** C1324+1329T11 start *******************************
fork07 0 TINFO : Forking 100 children
fork07 0 TINFO : Forked all 100 children, now collecting
fork07 0 TINFO : Collected all 100 children
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
*** C1324+1329T11 PASSED (1)
*** C1324+1329T12 start *******************************
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : second child got char: b
fork08 1 TPASS : Test passed in childnumber 2
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : parent forksval: 2
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 1 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 2 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 3 TPASS : parent test PASSED
fork08 0 TINFO : Number of processes forked is 2
*** C1324+1329T12 PASSED (4)
*** C1324+1329T13 start *******************************
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 0 TINFO : Child opened new file #1023
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 1 TPASS : test 1 PASSED
*** C1324+1329T13 PASSED (1)
*** C1324+1329T14 start *******************************
fork10 0 TINFO : fork child A
fork10 1 TPASS : test 1 PASSED
*** C1324+1329T14 PASSED (1)
*** C1324+1329T15 start *******************************
fork11 1 TPASS : fork test passed, 100 processes
*** C1324+1329T15 PASSED (1)
*** C1324+1329T16 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl01.c:50: PASS: msgctl(IPC_STAT)
msgctl01.c:53: PASS: msg_stime = 0
msgctl01.c:58: PASS: msg_rtime = 0
msgctl01.c:64: PASS: msg_ctime = 1574819699, expected 1574819699
msgctl01.c:71: PASS: msg_qnum = 0
msgctl01.c:76: PASS: msg_qbytes = 16384
msgctl01.c:81: PASS: msg_lspid = 0
msgctl01.c:86: PASS: msg_lrpid = 0
msgctl01.c:91: PASS: msg_perm.__key == 1627586573
msgctl01.c:98: PASS: msg_perm.uid = 0
msgctl01.c:105: PASS: msg_perm.gid = 0
msgctl01.c:112: PASS: msg_perm.cuid = 0
msgctl01.c:119: PASS: msg_perm.cgid = 0
msgctl01.c:126: PASS: msg_perm.mode = 0660
Summary:
passed 14
failed 0
skipped 0
warnings 0
*** C1324+1329T16 PASSED (14)
*** C1324+1329T17 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl02.c:47: PASS: msgctl(IPC_SET) msg_qbytes - 1
msgctl02.c:54: PASS: msg_qbytes = 16383
Summary:
passed 2
failed 0
skipped 0
warnings 0
*** C1324+1329T17 PASSED (2)
*** C1324+1329T18 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl03.c:40: PASS: msgctl(IPC_RMID)
msgctl03.c:44: PASS: msgctl(IPC_STAT): EINVAL
Summary:
passed 2
failed 0
skipped 0
warnings 0
*** C1324+1329T18 PASSED (2)
*** C1324+1329T19 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl04.c:72: PASS: msgctl(86835201, 2, 0x61cfa0): EACCES
msgctl04.c:72: PASS: msgctl(86867971, 2, 0xffffffffffffffff): EFAULT
msgctl04.c:72: PASS: msgctl(86867971, 1, 0xffffffffffffffff): EFAULT
msgctl04.c:72: PASS: msgctl(86867971, -1, 0x61cfa0): EINVAL
msgctl04.c:72: PASS: msgctl(-1, 2, 0x61cfa0): EINVAL
msgctl04.c:72: PASS: msgctl(-1, 1, 0x61cfa0): EINVAL
msgctl04.c:72: PASS: msgctl(86802432, 0, (nil)): EPERM
Summary:
passed 7
failed 0
skipped 0
warnings 0
*** C1324+1329T19 PASSED (7)
*** C1324+1329T20 start *******************************
tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s
msgctl12.c:54: PASS: msgctl() test IPC_INFO succeeded
msgctl12.c:54: PASS: msgctl() test MSG_INFO succeeded
msgctl12.c:54: PASS: msgctl() test MSG_STAT succeeded
Summary:
passed 3
failed 0
skipped 0
warnings 0
*** C1324+1329T20 PASSED (3)

View File

@ -7,7 +7,7 @@ BOOTPARAM="-m 1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1G@0,1
. ../../common.sh
issue="1324+1329"
issue="1324"
tid=01
for tno in 01 02 03
@ -25,7 +25,7 @@ do
echo ""
done
for tp in fork14 fork01 fork02 fork03 fork04 fork05 fork06 fork07 fork08 fork09 fork10 fork11 msgctl01 msgctl02 msgctl03 msgctl04 msgctl12
for tp in fork14 fork01 fork02 fork03 fork04 fork05 fork06 fork07 fork08 fork09 fork10 fork11
do
tname=`printf "C${issue}T%02d" ${tid}`
echo "*** ${tname} start *******************************"

View File

@ -1,11 +1,11 @@
CFLAGS=-g
LDFLAGS=
TARGET=C1324+1329T01 C1324+1329T02 C1324+1329T03
TARGET=C1324T01 C1324T02 C1324T03
all: $(TARGET)
test: all
./C1324+1329.sh
./C1324.sh
clean:
rm -f $(TARGET) *.o *.txt

View File

@ -1,4 +1,4 @@
【Issue#1324,#1329 動作確認】
【Issue#1324 動作確認】
□ テスト内容
本Issueの症状は、以下の操作の際に操作対象メモリの物理メモリが
McKernelに割り当てられたメモリチャンクの終端になっている場合に発生する
@ -35,7 +35,7 @@ C1324+1329T03:
2. 以下のLTPを用いてIssueで報告された症状が発生しないことを確認
- fork14
3. 以下のLTPを用いて既存のfork,msgctl機能に影響が無いことを確認
3. 以下のLTPを用いて既存のfork機能に影響が無いことを確認
- fork01
- fork02
- fork03
@ -47,11 +47,6 @@ C1324+1329T03:
- fork09
- fork10
- fork11
- msgctl01
- msgctl02
- msgctl03
- msgctl04
- msgctl12
□ 実行手順
$ make test

View File

@ -0,0 +1,94 @@
*** C1324T01 start *******************************
[OK] fork is successful
[OK] POKED value is correct!!
[OK] child exited normaly
*** C1324T01 PASSED ******************************
*** C1324T02 start *******************************
[OK] sigaltstack 1st is successful
[OK] sigaltstack 2nd is successful
*** C1324T02 PASSED ******************************
*** C1324T03 start *******************************
[OK] value read by proc_mem is correct
*** C1324T03 PASSED ******************************
*** C1324T04 start *******************************
fork14 1 TPASS : fork failed as expected.
*** C1324T04 PASSED (1)
*** C1324T05 start *******************************
fork01 1 TPASS : fork() returned 35497
fork01 2 TPASS : child pid and fork() return agree: 35497
*** C1324T05 PASSED (2)
*** C1324T06 start *******************************
fork02 0 TINFO : Inside parent
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
*** C1324T06 PASSED (1)
*** C1324T07 start *******************************
fork03 0 TINFO : process id in parent of child from fork : 35581
fork03 1 TPASS : test 1 PASSED
*** C1324T07 PASSED (1)
*** C1324T08 start *******************************
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
*** C1324T08 PASSED (3)
*** C1324T09 start *******************************
fork05 0 TINFO : %fs test only for ix86
*** C1324T09 PASSED (0)
*** C1324T10 start *******************************
fork06 0 TINFO : tries 1000
fork06 0 TINFO : successes 1000
fork06 0 TINFO : failures 0
fork06 0 TINFO : There were no children to wait for
*** C1324T10 PASSED (0)
*** C1324T11 start *******************************
fork07 0 TINFO : Forking 100 children
fork07 0 TINFO : Forked all 100 children, now collecting
fork07 0 TINFO : Collected all 100 children
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
*** C1324T11 PASSED (1)
*** C1324T12 start *******************************
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : second child got char: b
fork08 1 TPASS : Test passed in childnumber 2
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : parent forksval: 2
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 1 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 2 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 3 TPASS : parent test PASSED
fork08 0 TINFO : Number of processes forked is 2
*** C1324T12 PASSED (4)
*** C1324T13 start *******************************
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 0 TINFO : Child opened new file #1023
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 1 TPASS : test 1 PASSED
*** C1324T13 PASSED (1)
*** C1324T14 start *******************************
fork10 0 TINFO : fork child A
fork10 1 TPASS : test 1 PASSED
*** C1324T14 PASSED (1)
*** C1324T15 start *******************************
fork11 1 TPASS : fork test passed, 100 processes
*** C1324T15 PASSED (1)

View File

@ -0,0 +1,94 @@
*** C1324T01 start *******************************
[OK] fork is successful
[OK] POKED value is correct!!
[OK] child exited normaly
*** C1324T01 PASSED ******************************
*** C1324T02 start *******************************
[OK] sigaltstack 1st is successful
[OK] sigaltstack 2nd is successful
*** C1324T02 PASSED ******************************
*** C1324T03 start *******************************
[OK] value read by proc_mem is correct
*** C1324T03 PASSED ******************************
*** C1324T04 start *******************************
fork14 1 TPASS : fork failed as expected.
*** C1324T04 PASSED (1)
*** C1324T05 start *******************************
fork01 1 TPASS : fork() returned 12305
fork01 2 TPASS : child pid and fork() return agree: 12305
*** C1324T05 PASSED (2)
*** C1324T06 start *******************************
fork02 0 TINFO : Inside parent
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
*** C1324T06 PASSED (1)
*** C1324T07 start *******************************
fork03 0 TINFO : process id in parent of child from fork : 12365
fork03 1 TPASS : test 1 PASSED
*** C1324T07 PASSED (1)
*** C1324T08 start *******************************
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm-256color
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
*** C1324T08 PASSED (3)
*** C1324T09 start *******************************
fork05 0 TINFO : %fs test only for ix86
*** C1324T09 PASSED (0)
*** C1324T10 start *******************************
fork06 0 TINFO : tries 1000
fork06 0 TINFO : successes 1000
fork06 0 TINFO : failures 0
fork06 0 TINFO : There were no children to wait for
*** C1324T10 PASSED (0)
*** C1324T11 start *******************************
fork07 0 TINFO : Forking 100 children
fork07 0 TINFO : Forked all 100 children, now collecting
fork07 0 TINFO : Collected all 100 children
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
*** C1324T11 PASSED (1)
*** C1324T12 start *******************************
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : second child got char: b
fork08 1 TPASS : Test passed in childnumber 2
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : parent forksval: 2
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 1 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 2 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 3 TPASS : parent test PASSED
fork08 0 TINFO : Number of processes forked is 2
*** C1324T12 PASSED (4)
*** C1324T13 start *******************************
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 0 TINFO : Child opened new file #1023
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 1 TPASS : test 1 PASSED
*** C1324T13 PASSED (1)
*** C1324T14 start *******************************
fork10 0 TINFO : fork child A
fork10 1 TPASS : test 1 PASSED
*** C1324T14 PASSED (1)
*** C1324T15 start *******************************
fork11 1 TPASS : fork test passed, 100 processes
*** C1324T15 PASSED (1)

43
test/issues/1329/C1329.sh Executable file
View File

@ -0,0 +1,43 @@
#/bin/sh
USELTP=1
USEOSTEST=0
. ../../common.sh
issue="1329"
tid=01
if [ `uname -p` == "x86_64" ]; then
tname=`printf "C${issue}T%02d" ${tid}`
echo "*** ${tname} start *******************************"
for idx in `seq 1 300`;
do
echo "*** Rep: $idx ***"
echo -n "** Start:"
date "+%H:%M:%S"
sudo $MCEXEC $LTPBIN/msgctl11
echo -n "** Done:"
date "+%H:%M:%S"
done
echo "*** ${tname} PASSED"
fi
let tid++
for tp in fork01 fork02 fork03 fork04 fork05 fork06 fork07 fork08 fork09 fork10 fork11
do
tname=`printf "C${issue}T%02d" ${tid}`
echo "*** ${tname} start *******************************"
sudo $MCEXEC $LTPBIN/$tp 2>&1 | tee $tp.txt
ok=`grep PASS $tp.txt | wc -l`
ng=`grep FAIL $tp.txt | wc -l`
if [ $ng = 0 ]; then
echo "*** ${tname} PASSED ($ok)"
else
echo "*** ${tname} FAILED (ok=$ok ng=%ng)"
fi
let tid++
echo ""
done

View File

@ -0,0 +1,9 @@
CFLAGS=-g
LDFLAGS=
all: $(TARGET)
test: all
./C1329.sh
clean:
rm -f $(TARGET) *.o *.txt

30
test/issues/1329/README Normal file
View File

@ -0,0 +1,30 @@
【Issue#1329 動作確認】
□ テスト内容
1. 以下のLTPを300回連続実行し、Issueで報告された症状が発生しないことを確認
- msgctl11
なお、本テストケースはapollo上では別の不具合によりテストが動作しないため、テスト対象から除外した
2. 以下のLTPを用いて既存のfork機能に影響が無いことを確認
- fork01
- fork02
- fork03
- fork04
- fork05
- fork06
- fork07
- fork08
- fork09
- fork10
- fork11
□ 実行手順
$ make test
McKernelのインストール先や、OSTEST, LTPの配置場所は、
$HOME/.mck_test_config を参照している
.mck_test_config は、McKernelをビルドした際に生成されるmck_test_config.sample ファイルを
$HOMEにコピーし、適宜編集する
□ 実行結果
x86_64_result.log aarch64_result.log 参照。
すべての項目をPASSしていることを確認。

View File

@ -0,0 +1,75 @@
*** C1329T02 start *******************************
fork01 1 TPASS : fork() returned 20716
fork01 2 TPASS : child pid and fork() return agree: 20716
*** C1329T02 PASSED (2)
*** C1329T03 start *******************************
fork02 0 TINFO : Inside parent
fork02 0 TINFO : exit status of wait 0
fork02 1 TPASS : test 1 PASSED
*** C1329T03 PASSED (1)
*** C1329T04 start *******************************
fork03 0 TINFO : process id in parent of child from fork : 20856
fork03 1 TPASS : test 1 PASSED
*** C1329T04 PASSED (1)
*** C1329T05 start *******************************
fork04 1 TPASS : Env var TERM unchanged after fork(): xterm
fork04 2 TPASS : Env var NoTSetzWq unchanged after fork(): getenv() does not find variable set
fork04 3 TPASS : Env var TESTPROG unchanged after fork(): FRKTCS04
*** C1329T05 PASSED (3)
*** C1329T06 start *******************************
fork05 0 TINFO : %fs test only for ix86
*** C1329T06 PASSED (0)
*** C1329T07 start *******************************
fork06 0 TINFO : tries 1000
fork06 0 TINFO : successes 1000
fork06 0 TINFO : failures 0
fork06 0 TINFO : There were no children to wait for
*** C1329T07 PASSED (0)
*** C1329T08 start *******************************
fork07 0 TINFO : Forking 100 children
fork07 0 TINFO : Forked all 100 children, now collecting
fork07 0 TINFO : Collected all 100 children
fork07 1 TPASS : 100/100 children read correctly from an inheritted fd
*** C1329T08 PASSED (1)
*** C1329T09 start *******************************
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : second child got char: b
fork08 1 TPASS : Test passed in childnumber 2
fork08 0 TINFO : parent forksval: 1
fork08 0 TINFO : parent forksval: 2
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 1 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 2 TPASS : parent test PASSED
fork08 0 TINFO : exit status of wait expected 0 got 0
fork08 3 TPASS : parent test PASSED
fork08 0 TINFO : Number of processes forked is 2
*** C1329T09 PASSED (4)
*** C1329T10 start *******************************
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 0 TINFO : Child opened new file #1023
fork09 0 TINFO : OPEN_MAX is 1024
fork09 0 TINFO : first file descriptor is 8
fork09 0 TINFO : Parent reporting 1023 files open
fork09 1 TPASS : test 1 PASSED
*** C1329T10 PASSED (1)
*** C1329T11 start *******************************
fork10 0 TINFO : fork child A
fork10 1 TPASS : test 1 PASSED
*** C1329T11 PASSED (1)
*** C1329T12 start *******************************
fork11 1 TPASS : fork test passed, 100 processes
*** C1329T12 PASSED (1)

File diff suppressed because it is too large Load Diff