mcexec: Don't forward SIGTSTP SIGTTIN SIGTTOUT to mckernel

Change-Id: I72bb74d6b98e1f0bf519c8f0fef742624a2a699a
Refs: #1425
This commit is contained in:
Ken Sato
2020-06-04 14:18:08 +09:00
committed by Masamichi Takagi
parent b44b11ace7
commit 4b66373813
7 changed files with 500 additions and 1 deletions

View File

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

43
test/issues/1425/C1425.sh Executable file
View File

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

11
test/issues/1425/Makefile Normal file
View File

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

37
test/issues/1425/README Normal file
View File

@ -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していることを確認。

View File

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

View File

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

View File

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