From 4b663738130272d7b9473bdb9b7d267b9140d7ce Mon Sep 17 00:00:00 2001 From: Ken Sato Date: Thu, 4 Jun 2020 14:18:08 +0900 Subject: [PATCH] mcexec: Don't forward SIGTSTP SIGTTIN SIGTTOUT to mckernel Change-Id: I72bb74d6b98e1f0bf519c8f0fef742624a2a699a Refs: #1425 --- executer/user/mcexec.c | 3 +- test/issues/1425/C1425.sh | 43 +++++++ test/issues/1425/Makefile | 11 ++ test/issues/1425/README | 37 ++++++ test/issues/1425/aarch64_result.log | 176 ++++++++++++++++++++++++++++ test/issues/1425/check_stopsig.sh | 55 +++++++++ test/issues/1425/x86_64_result.log | 176 ++++++++++++++++++++++++++++ 7 files changed, 500 insertions(+), 1 deletion(-) create mode 100755 test/issues/1425/C1425.sh create mode 100644 test/issues/1425/Makefile create mode 100644 test/issues/1425/README create mode 100644 test/issues/1425/aarch64_result.log create mode 100755 test/issues/1425/check_stopsig.sh create mode 100644 test/issues/1425/x86_64_result.log diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c index 6bfc3aff..95618105 100644 --- a/executer/user/mcexec.c +++ b/executer/user/mcexec.c @@ -1322,7 +1322,8 @@ void init_sigaction(void) master_tid = gettid(); for (i = 1; i <= 64; i++) { - if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD) { + if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD && + i != SIGTSTP && i != SIGTTIN && i != SIGTTOU) { struct sigaction act; sigaction(i, NULL, &act); diff --git a/test/issues/1425/C1425.sh b/test/issues/1425/C1425.sh new file mode 100755 index 00000000..c5a5a21a --- /dev/null +++ b/test/issues/1425/C1425.sh @@ -0,0 +1,43 @@ +#/bin/sh + +USELTP=1 +USEOSTEST=0 + +. ../../common.sh + +issue="1425" +tid=01 + +STOPSIG_LIST="TSTP TTIN TTOU" + +for signame in ${STOPSIG_LIST} +do + tname=`printf "C${issue}T%02d" ${tid}` + echo "*** ${tname} start *******************************" + sh ./check_stopsig.sh ${MCEXEC} ${signame} + + if [ $? -eq 0 ]; then + echo "*** ${tname} PASSED ******************************" + else + echo "*** ${tname} FAILED ******************************" + fi + let tid++ + echo "" +done + +for tp in kill01 kill02 kill06 kill07 kill08 kill09 signal01 signal03 signal04 signal05 +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 + diff --git a/test/issues/1425/Makefile b/test/issues/1425/Makefile new file mode 100644 index 00000000..ab8be647 --- /dev/null +++ b/test/issues/1425/Makefile @@ -0,0 +1,11 @@ +CFLAGS=-g +LDFLAGS= + +TARGET= + +all: $(TARGET) + +test: all + sh ./C1425.sh +clean: + rm -f $(TARGET) *.o *.txt diff --git a/test/issues/1425/README b/test/issues/1425/README new file mode 100644 index 00000000..282111f2 --- /dev/null +++ b/test/issues/1425/README @@ -0,0 +1,37 @@ +【Issue#1425 動作確認】 +□ テスト内容 +1. 本修正ではmcexecにてSIGTSTP, SIGTTIN, SIGTTOU を補足しないようにする + 修正を実施した。 + 上記のシグナルのデフォルト動作はプロセスの停止である。 + それぞれのシグナルについて、以下を確認する。 + - 実行中のMcKernelプロセスに通知した際、通知先のプロセスが停止する + - 停止されたプロセスに対してSIGCONTを通知することで、プロセスが再開できる + +C1425T01: SIGTSTP の動作を確認 +C1425T02: SIGTTIN の動作を確認 +C1425T03: SIGTTOU の動作を確認 + +2. 以下のLTPを用いて既存のsignal機能に影響が無いことを確認 + - kill01 + - kill02 + - kill06 + - kill07 + - kill08 + - kill09 + - signal01 + - signal03 + - signal04 + - signal05 + +□ 実行手順 +・下記の手順でテストを実行する +$ 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していることを確認。 diff --git a/test/issues/1425/aarch64_result.log b/test/issues/1425/aarch64_result.log new file mode 100644 index 00000000..506249d0 --- /dev/null +++ b/test/issues/1425/aarch64_result.log @@ -0,0 +1,176 @@ +*** C1425T01 start ******************************* +** Exec sleep 3 +** TargetPID: 52277 +[OK] 52277 is running : S+ +** SEND SIGTSTP to 52277 +[OK] 52277 is stopped : T+ +** Sleep 3 sec +[OK] 52277 is still stopped : T+ +** SEND SIGCONT to 52277 +** Wait pid: 52277 +[OK] pid: 52277 is Done. +*** C1425T01 PASSED ****************************** + +*** C1425T02 start ******************************* +** Exec sleep 3 +** TargetPID: 52330 +[OK] 52330 is running : SLl+ +** SEND SIGTTIN to 52330 +[OK] 52330 is stopped : TLl+ +** Sleep 3 sec +[OK] 52330 is still stopped : TLl+ +** SEND SIGCONT to 52330 +** Wait pid: 52330 +[OK] pid: 52330 is Done. +*** C1425T02 PASSED ****************************** + +*** C1425T03 start ******************************* +** Exec sleep 3 +** TargetPID: 52378 +[OK] 52378 is running : SLl+ +** SEND SIGTTOU to 52378 +[OK] 52378 is stopped : TLl+ +** Sleep 3 sec +[OK] 52378 is still stopped : TLl+ +** SEND SIGCONT to 52378 +** Wait pid: 52378 +[OK] pid: 52378 is Done. +*** C1425T03 PASSED ****************************** + +*** C1425T04 start ******************************* +kill01 1 TPASS : received expected signal 9 +*** C1425T04 PASSED (1) + +*** C1425T05 start ******************************* +kill02 1 TPASS : The signal was sent to all processes in the process group. +kill02 2 TPASS : The signal was not sent to selective processes that were not in the process group. +*** C1425T05 PASSED (2) + +*** C1425T06 start ******************************* +kill06 1 TPASS : received expected signal 9 +*** C1425T06 PASSED (1) + +*** C1425T07 start ******************************* +kill07 0 TINFO : received expected signal 9 +kill07 1 TPASS : Did not catch signal as expected +*** C1425T07 PASSED (1) + +*** C1425T08 start ******************************* +kill08 1 TPASS : received expected signal 9 +*** C1425T08 PASSED (1) + +*** C1425T09 start ******************************* +kill09 1 TPASS : kill(52839, SIGKILL) returned 0 +*** C1425T09 PASSED (1) + +*** C1425T10 start ******************************* +signal01 1 TPASS : signal(SIGKILL, 0x1(SIG_IGN)) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : signal(SIGKILL, (nil)(SIG_DFL)) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : signal(SIGKILL, 0x403b20(catchsig())) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : Child killed with SIGKILL +signal01 2 TPASS : Child killed with SIGKILL +signal01 3 TPASS : Child killed with SIGKILL +*** C1425T10 PASSED (9) + +*** C1425T11 start ******************************* +signal03 1 TPASS : signal03 call succeeded +signal03 2 TPASS : signal03 call succeeded +signal03 3 TPASS : signal03 call succeeded +signal03 4 TPASS : signal03 call succeeded +signal03 5 TPASS : signal03 call succeeded +signal03 6 TPASS : signal03 call succeeded +signal03 7 TPASS : signal03 call succeeded +signal03 8 TPASS : signal03 call succeeded +signal03 9 TPASS : signal03 call succeeded +signal03 10 TPASS : signal03 call succeeded +signal03 11 TPASS : signal03 call succeeded +signal03 12 TPASS : signal03 call succeeded +signal03 13 TPASS : signal03 call succeeded +signal03 14 TPASS : signal03 call succeeded +signal03 15 TPASS : signal03 call succeeded +signal03 16 TPASS : signal03 call succeeded +signal03 17 TPASS : signal03 call succeeded +signal03 18 TPASS : signal03 call succeeded +signal03 19 TPASS : signal03 call succeeded +signal03 20 TPASS : signal03 call succeeded +signal03 21 TPASS : signal03 call succeeded +signal03 22 TPASS : signal03 call succeeded +signal03 23 TPASS : signal03 call succeeded +signal03 24 TPASS : signal03 call succeeded +signal03 25 TPASS : signal03 call succeeded +signal03 26 TPASS : signal03 call succeeded +signal03 27 TPASS : signal03 call succeeded +signal03 28 TPASS : signal03 call succeeded +signal03 29 TPASS : signal03 call succeeded +signal03 30 TPASS : signal03 call succeeded +signal03 31 TPASS : signal03 call succeeded +*** C1425T11 PASSED (31) + +*** C1425T12 start ******************************* +signal04 1 TPASS : signal04 call succeeded received (nil). +signal04 2 TPASS : signal04 call succeeded received (nil). +signal04 3 TPASS : signal04 call succeeded received (nil). +signal04 4 TPASS : signal04 call succeeded received (nil). +signal04 5 TPASS : signal04 call succeeded received (nil). +signal04 6 TPASS : signal04 call succeeded received (nil). +signal04 7 TPASS : signal04 call succeeded received (nil). +signal04 8 TPASS : signal04 call succeeded received (nil). +signal04 9 TPASS : signal04 call succeeded received (nil). +signal04 10 TPASS : signal04 call succeeded received (nil). +signal04 11 TPASS : signal04 call succeeded received (nil). +signal04 12 TPASS : signal04 call succeeded received (nil). +signal04 13 TPASS : signal04 call succeeded received (nil). +signal04 14 TPASS : signal04 call succeeded received (nil). +signal04 15 TPASS : signal04 call succeeded received (nil). +signal04 16 TPASS : signal04 call succeeded received (nil). +signal04 17 TPASS : signal04 call succeeded received (nil). +signal04 18 TPASS : signal04 call succeeded received (nil). +signal04 19 TPASS : signal04 call succeeded received (nil). +signal04 20 TPASS : signal04 call succeeded received (nil). +signal04 21 TPASS : signal04 call succeeded received (nil). +signal04 22 TPASS : signal04 call succeeded received (nil). +signal04 23 TPASS : signal04 call succeeded received (nil). +signal04 24 TPASS : signal04 call succeeded received (nil). +signal04 25 TPASS : signal04 call succeeded received (nil). +signal04 26 TPASS : signal04 call succeeded received (nil). +signal04 27 TPASS : signal04 call succeeded received (nil). +signal04 28 TPASS : signal04 call succeeded received (nil). +*** C1425T12 PASSED (28) + +*** C1425T13 start ******************************* +signal05 1 TPASS : signal05 call succeeded +signal05 2 TPASS : signal05 call succeeded +signal05 3 TPASS : signal05 call succeeded +signal05 4 TPASS : signal05 call succeeded +signal05 5 TPASS : signal05 call succeeded +signal05 6 TPASS : signal05 call succeeded +signal05 7 TPASS : signal05 call succeeded +signal05 8 TPASS : signal05 call succeeded +signal05 9 TPASS : signal05 call succeeded +signal05 10 TPASS : signal05 call succeeded +signal05 11 TPASS : signal05 call succeeded +signal05 12 TPASS : signal05 call succeeded +signal05 13 TPASS : signal05 call succeeded +signal05 14 TPASS : signal05 call succeeded +signal05 15 TPASS : signal05 call succeeded +signal05 16 TPASS : signal05 call succeeded +signal05 17 TPASS : signal05 call succeeded +signal05 18 TPASS : signal05 call succeeded +signal05 19 TPASS : signal05 call succeeded +signal05 20 TPASS : signal05 call succeeded +signal05 21 TPASS : signal05 call succeeded +signal05 22 TPASS : signal05 call succeeded +signal05 23 TPASS : signal05 call succeeded +signal05 24 TPASS : signal05 call succeeded +signal05 25 TPASS : signal05 call succeeded +signal05 26 TPASS : signal05 call succeeded +signal05 27 TPASS : signal05 call succeeded +signal05 28 TPASS : signal05 call succeeded +signal05 29 TPASS : signal05 call succeeded +signal05 30 TPASS : signal05 call succeeded +signal05 31 TPASS : signal05 call succeeded +*** C1425T13 PASSED (31) + diff --git a/test/issues/1425/check_stopsig.sh b/test/issues/1425/check_stopsig.sh new file mode 100755 index 00000000..c053167e --- /dev/null +++ b/test/issues/1425/check_stopsig.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +rc=0 +slptime=3 + +mcexec=$1 +signame=$2 + +echo "** Exec sleep ${slptime}" +mcexec sleep ${slptime} & +tgtpid=$! + +echo "** TargetPID: ${tgtpid}" +stat_1=`ps -o stat,pid -p ${tgtpid} | grep ${tgtpid} | cut -f1 -d ' '` + +if [ `echo ${stat_1} | grep -e "^S" | wc -l` -eq 1 ]; then + echo "[OK] ${tgtpid} is running : ${stat_1}" +else + echo "[NG] ${tgtpid} is NOT running : ${stat_1}" + rc=1 +fi + +echo "** SEND SIG${signame} to ${tgtpid}" +kill -${signame} ${tgtpid} +sleep 1 + +stat_2=`ps -o stat,pid -p ${tgtpid} | grep ${tgtpid} | cut -f1 -d ' '` + +if [ `echo ${stat_2} | grep -e "^T" | wc -l` -eq 1 ]; then + echo "[OK] ${tgtpid} is stopped : ${stat_2}" +else + echo "[NG] ${tgtpid} is NOT stopped : ${stat_2}" + rc=1 +fi + +echo "** Sleep ${slptime} sec" +sleep ${slptime} + +stat_3=`ps -o stat,pid -p ${tgtpid} | grep ${tgtpid} | cut -f1 -d ' '` + +if [ `echo ${stat_2} | grep -e "^T" | wc -l` -eq 1 ]; then + echo "[OK] ${tgtpid} is still stopped : ${stat_3}" +else + echo "[NG] ${tgtpid} is NOT stopped : ${stat_3}" + rc=1 +fi + +echo "** SEND SIGCONT to ${tgtpid}" +kill -CONT ${tgtpid} + +echo "** Wait pid: ${tgtpid}" +wait ${tgtpid} + +echo "[OK] pid: ${tgtpid} is Done." +exit ${rc} diff --git a/test/issues/1425/x86_64_result.log b/test/issues/1425/x86_64_result.log new file mode 100644 index 00000000..507f40d0 --- /dev/null +++ b/test/issues/1425/x86_64_result.log @@ -0,0 +1,176 @@ +*** C1425T01 start ******************************* +** Exec sleep 3 +** TargetPID: 5737 +[OK] 5737 is running : S+ +** SEND SIGTSTP to 5737 +[OK] 5737 is stopped : TL+ +** Sleep 3 sec +[OK] 5737 is still stopped : TL+ +** SEND SIGCONT to 5737 +** Wait pid: 5737 +[OK] pid: 5737 is Done. +*** C1425T01 PASSED ****************************** + +*** C1425T02 start ******************************* +** Exec sleep 3 +** TargetPID: 5798 +[OK] 5798 is running : SLl+ +** SEND SIGTTIN to 5798 +[OK] 5798 is stopped : TLl+ +** Sleep 3 sec +[OK] 5798 is still stopped : TLl+ +** SEND SIGCONT to 5798 +** Wait pid: 5798 +[OK] pid: 5798 is Done. +*** C1425T02 PASSED ****************************** + +*** C1425T03 start ******************************* +** Exec sleep 3 +** TargetPID: 5859 +[OK] 5859 is running : SLl+ +** SEND SIGTTOU to 5859 +[OK] 5859 is stopped : TLl+ +** Sleep 3 sec +[OK] 5859 is still stopped : TLl+ +** SEND SIGCONT to 5859 +** Wait pid: 5859 +[OK] pid: 5859 is Done. +*** C1425T03 PASSED ****************************** + +*** C1425T04 start ******************************* +kill01 1 TPASS : received expected signal 9 +*** C1425T04 PASSED (1) + +*** C1425T05 start ******************************* +kill02 1 TPASS : The signal was sent to all processes in the process group. +kill02 2 TPASS : The signal was not sent to selective processes that were not in the process group. +*** C1425T05 PASSED (2) + +*** C1425T06 start ******************************* +kill06 1 TPASS : received expected signal 9 +*** C1425T06 PASSED (1) + +*** C1425T07 start ******************************* +kill07 0 TINFO : received expected signal 9 +kill07 1 TPASS : Did not catch signal as expected +*** C1425T07 PASSED (1) + +*** C1425T08 start ******************************* +kill08 1 TPASS : received expected signal 9 +*** C1425T08 PASSED (1) + +*** C1425T09 start ******************************* +kill09 1 TPASS : kill(6713, SIGKILL) returned 0 +*** C1425T09 PASSED (1) + +*** C1425T10 start ******************************* +signal01 1 TPASS : signal(SIGKILL, 0x1(SIG_IGN)) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : signal(SIGKILL, (nil)(SIG_DFL)) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : signal(SIGKILL, 0x403620(catchsig())) failed with EINVAL +signal01 0 TINFO : Child process returned TPASS +signal01 1 TPASS : Child killed with SIGKILL +signal01 2 TPASS : Child killed with SIGKILL +signal01 3 TPASS : Child killed with SIGKILL +*** C1425T10 PASSED (9) + +*** C1425T11 start ******************************* +signal03 1 TPASS : signal03 call succeeded +signal03 2 TPASS : signal03 call succeeded +signal03 3 TPASS : signal03 call succeeded +signal03 4 TPASS : signal03 call succeeded +signal03 5 TPASS : signal03 call succeeded +signal03 6 TPASS : signal03 call succeeded +signal03 7 TPASS : signal03 call succeeded +signal03 8 TPASS : signal03 call succeeded +signal03 9 TPASS : signal03 call succeeded +signal03 10 TPASS : signal03 call succeeded +signal03 11 TPASS : signal03 call succeeded +signal03 12 TPASS : signal03 call succeeded +signal03 13 TPASS : signal03 call succeeded +signal03 14 TPASS : signal03 call succeeded +signal03 15 TPASS : signal03 call succeeded +signal03 16 TPASS : signal03 call succeeded +signal03 17 TPASS : signal03 call succeeded +signal03 18 TPASS : signal03 call succeeded +signal03 19 TPASS : signal03 call succeeded +signal03 20 TPASS : signal03 call succeeded +signal03 21 TPASS : signal03 call succeeded +signal03 22 TPASS : signal03 call succeeded +signal03 23 TPASS : signal03 call succeeded +signal03 24 TPASS : signal03 call succeeded +signal03 25 TPASS : signal03 call succeeded +signal03 26 TPASS : signal03 call succeeded +signal03 27 TPASS : signal03 call succeeded +signal03 28 TPASS : signal03 call succeeded +signal03 29 TPASS : signal03 call succeeded +signal03 30 TPASS : signal03 call succeeded +signal03 31 TPASS : signal03 call succeeded +*** C1425T11 PASSED (31) + +*** C1425T12 start ******************************* +signal04 1 TPASS : signal04 call succeeded received (nil). +signal04 2 TPASS : signal04 call succeeded received (nil). +signal04 3 TPASS : signal04 call succeeded received (nil). +signal04 4 TPASS : signal04 call succeeded received (nil). +signal04 5 TPASS : signal04 call succeeded received (nil). +signal04 6 TPASS : signal04 call succeeded received (nil). +signal04 7 TPASS : signal04 call succeeded received (nil). +signal04 8 TPASS : signal04 call succeeded received (nil). +signal04 9 TPASS : signal04 call succeeded received (nil). +signal04 10 TPASS : signal04 call succeeded received (nil). +signal04 11 TPASS : signal04 call succeeded received (nil). +signal04 12 TPASS : signal04 call succeeded received (nil). +signal04 13 TPASS : signal04 call succeeded received (nil). +signal04 14 TPASS : signal04 call succeeded received (nil). +signal04 15 TPASS : signal04 call succeeded received (nil). +signal04 16 TPASS : signal04 call succeeded received (nil). +signal04 17 TPASS : signal04 call succeeded received (nil). +signal04 18 TPASS : signal04 call succeeded received (nil). +signal04 19 TPASS : signal04 call succeeded received (nil). +signal04 20 TPASS : signal04 call succeeded received (nil). +signal04 21 TPASS : signal04 call succeeded received (nil). +signal04 22 TPASS : signal04 call succeeded received (nil). +signal04 23 TPASS : signal04 call succeeded received (nil). +signal04 24 TPASS : signal04 call succeeded received (nil). +signal04 25 TPASS : signal04 call succeeded received (nil). +signal04 26 TPASS : signal04 call succeeded received (nil). +signal04 27 TPASS : signal04 call succeeded received (nil). +signal04 28 TPASS : signal04 call succeeded received (nil). +*** C1425T12 PASSED (28) + +*** C1425T13 start ******************************* +signal05 1 TPASS : signal05 call succeeded +signal05 2 TPASS : signal05 call succeeded +signal05 3 TPASS : signal05 call succeeded +signal05 4 TPASS : signal05 call succeeded +signal05 5 TPASS : signal05 call succeeded +signal05 6 TPASS : signal05 call succeeded +signal05 7 TPASS : signal05 call succeeded +signal05 8 TPASS : signal05 call succeeded +signal05 9 TPASS : signal05 call succeeded +signal05 10 TPASS : signal05 call succeeded +signal05 11 TPASS : signal05 call succeeded +signal05 12 TPASS : signal05 call succeeded +signal05 13 TPASS : signal05 call succeeded +signal05 14 TPASS : signal05 call succeeded +signal05 15 TPASS : signal05 call succeeded +signal05 16 TPASS : signal05 call succeeded +signal05 17 TPASS : signal05 call succeeded +signal05 18 TPASS : signal05 call succeeded +signal05 19 TPASS : signal05 call succeeded +signal05 20 TPASS : signal05 call succeeded +signal05 21 TPASS : signal05 call succeeded +signal05 22 TPASS : signal05 call succeeded +signal05 23 TPASS : signal05 call succeeded +signal05 24 TPASS : signal05 call succeeded +signal05 25 TPASS : signal05 call succeeded +signal05 26 TPASS : signal05 call succeeded +signal05 27 TPASS : signal05 call succeeded +signal05 28 TPASS : signal05 call succeeded +signal05 29 TPASS : signal05 call succeeded +signal05 30 TPASS : signal05 call succeeded +signal05 31 TPASS : signal05 call succeeded +*** C1425T13 PASSED (31) +