Test "Error handling improvement" on arm64

The following test set:
  execve: fix memory leak
  add: NULL check for master_channel at IKC interrupt_handler.
  Fix the check routine for elf sections (Fujitsu: POSTK_TEMP_FIX_77)

Change-Id: I16c2a341c48f6df10a4839be08b93ea16bda8fbe
Refs: #727
Refs: #873
Refs: #1011
This commit is contained in:
Shiratori, Takehiro
2018-12-04 17:09:33 +09:00
committed by Masamichi Takagi
parent ec844bb6e3
commit 95e90c727e
22 changed files with 830 additions and 60 deletions

View File

@@ -0,0 +1,13 @@
diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c
index 2d0d50e..9f109aa 100644
--- a/executer/user/mcexec.c
+++ b/executer/user/mcexec.c
@@ -470,7 +470,7 @@ struct program_load_desc *load_interp(struct program_load_desc *desc0, FILE *fp)
j++;
}
}
- desc->num_sections = j;
+ desc->num_sections = -1; // Test for num_secionts check Issue#1011
desc->entry = hdr.e_entry;
desc->interp_align = align;

View File

@@ -0,0 +1,17 @@
■ Issue#1011 動作確認
1. ファイルの説明
1011.patch mcexec からmcctrl.ko に渡すprogram_load_des構造体のnum_sections に
常に-1 を設定するパッチ
2. 確認方法
1. 上記パッチを適用していない状態でMcKernelを起動する
2. mcexec hostname を実行し、ホスト名が表示されることを確認する
3. 上記パッチをMcKernelに適用後、ビルドと起動を行う
4. mcexec hostname を実行し、ホスト名が表示されず、"prepare: Invalid argument"が
コンソールに出力されることを確認する
5. /var/log/messages に"kernel: mcexec_prepare_image: ERROR: # of sections: -1"が
出力されていることを確認する
3. 確認結果
上記確認方法で期待される動作が確認できたため、問題ない。

View File

@@ -0,0 +1,15 @@
diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c
index 2d0d50e..70856e7 100644
--- a/executer/user/mcexec.c
+++ b/executer/user/mcexec.c
@@ -3732,7 +3732,9 @@ return_execve1:
/* Copy program image phase */
case 2:
-
+ fprintf(stderr, "execve killed\n");
+ fflush(stderr);
+ kill(getpid(), SIGKILL);
ret = -1;
/* Alloc descriptor */
desc = malloc(w.sr.args[2]);

View File

@@ -0,0 +1,28 @@
■ Issue#727 動作確認
1. ファイルの説明
727.patch 再現確認用パッチ mcexec において、execve phase 2 を SIGKILL
終了させる
exec.c 確認用テストプログラム exec ls する
patch-off.log パッチ非適用時の動作確認結果 ls の結果が表示されれば OK
patch-on.log パッチ適用時の動作確認結果 強制終了し、McKernel が PANIC して
いなければ OK
2. テスト手順・結果確認方法
gcc -o exec exec.c
script patch-off.log
mcexec ./exec
# mcexecが強制終了していればOK
ihkosctl 0 kmsg
# ログに PANIC の表示が無ければOK
exit
patch -p1 < 727.patch
<compile mckernel>
script patch-on.log
mcexec ./exec
# lsの結果が表示されていればOK
ihkosctl 0 kmsg
# ログに PANIC の表示が無ければOK
exit

View File

@@ -0,0 +1,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
int
main(int argc, char **argv)
{
execlp("ls", "ls", NULL);
}

View File

@@ -0,0 +1,33 @@
スクリプトは Wed Nov 29 11:22:32 2017
に開始しました[?1034hbash-4.2$ ../../../../mic/mcexec ./exec
727.patch exec exec.c patch-off.log
bash-4.2$ ../../../../mic/ihkosctl 0kmsg kmsg
IHK/McKernel started.
[ -1]: no_execute_available: 1
[ -1]: X86_IA32_NUM_PERF_COUNTERS: 4, X86_IA32_NUM_FIXED_PERF_COUNTERS: 3
[ -1]: Invariant TSC supported.
[ -1]: setup_x86 done.
[ -1]: ns_per_tsc: 384
[ -1]: KCommand Line: hidos dump_level=24
[ -1]: Physical memory: 0x1002c7000 - 0x140000000, 1070829568 bytes, 261433 pages available @ NUMA: 0
[ -1]: Physical memory: 0x880000000 - 0x8c0000000, 1073741824 bytes, 262144 pages available @ NUMA: 1
[ -1]: NUMA: 0, Linux NUMA: 0, type: 1, available bytes: 1070829568, pages: 261433
[ -1]: NUMA: 1, Linux NUMA: 1, type: 1, available bytes: 1073741824, pages: 262144
[ -1]: NUMA 0 distances: 0 (10), 1 (21),
[ -1]: NUMA 1 distances: 1 (10), 0 (21),
[ -1]: map_fixed: phys: 0x90000 => 0xffffffff70015000 (2 pages)
[ -1]: Trampoline area: 0x90000
[ -1]: map_fixed: phys: 0x0 => 0xffffffff70017000 (1 pages)
[ -1]: # of cpus : 7
[ -1]: locals = ffff8001002eb000
[ 0]: BSP: 0 (HW ID: 2 @ NUMA 0)
[ 0]: BSP: booted 6 AP CPUs
[ 0]: Master channel init acked.
[ 0]: vdso is enabled
IHK/McKernel booted.
bash-4.2$ シェルから脱出するには "exit" を使用してください。
bash-4.2$ exit
スクリプトは Wed Nov 29 11:22:57 2017
に終了しました

View File

@@ -0,0 +1,35 @@
スクリプトは Wed Nov 29 11:25:01 2017
に開始しました[?1034hbash-4.2$ ../../../../mic/mcexec ./exec
execve killed
強制終了
bash-4.2$ ../../../../mic/ihkosctl 0 kmsg
IHK/McKernel started.
[ -1]: no_execute_available: 1
[ -1]: X86_IA32_NUM_PERF_COUNTERS: 4, X86_IA32_NUM_FIXED_PERF_COUNTERS: 3
[ -1]: Invariant TSC supported.
[ -1]: setup_x86 done.
[ -1]: ns_per_tsc: 384
[ -1]: KCommand Line: hidos dump_level=24
[ -1]: Physical memory: 0x1002c7000 - 0x140000000, 1070829568 bytes, 261433 pages available @ NUMA: 0
[ -1]: Physical memory: 0x880000000 - 0x8c0000000, 1073741824 bytes, 262144 pages available @ NUMA: 1
[ -1]: NUMA: 0, Linux NUMA: 0, type: 1, available bytes: 1070829568, pages: 261433
[ -1]: NUMA: 1, Linux NUMA: 1, type: 1, available bytes: 1073741824, pages: 262144
[ -1]: NUMA 0 distances: 0 (10), 1 (21),
[ -1]: NUMA 1 distances: 1 (10), 0 (21),
[ -1]: map_fixed: phys: 0x90000 => 0xffffffff70015000 (2 pages)
[ -1]: Trampoline area: 0x90000
[ -1]: map_fixed: phys: 0x0 => 0xffffffff70017000 (1 pages)
[ -1]: # of cpus : 7
[ -1]: locals = ffff8001002eb000
[ 0]: BSP: 0 (HW ID: 2 @ NUMA 0)
[ 0]: BSP: booted 6 AP CPUs
[ 0]: Master channel init acked.
[ 0]: vdso is enabled
IHK/McKernel booted.
[ 0]: do_syscall: proxy PID 14276 is dead, terminate()
bash-4.2$ シェルから脱出するには "exit" を使用してください。
bash-4.2$ exit
スクリプトは Wed Nov 29 11:25:33 2017
に終了しました

View File

@@ -0,0 +1,12 @@
■ Issue#873 動作確認
1. ファイルの説明
mck_boot_test.sh McKernelの停止→起動 を100回繰り返すスクリプト
すべてで成功した場合には[OK]メッセージを、途中で失敗した場合には[NG] メッセージを出力する
2. 確認方法
1. mck_boot_test.sh のMCK_DIR にMcKernelのインストールディレクトリを指定する
2. sh ./mck_boot_test.sh を実行する
3. [OK]メッセージがコンソールに出力されることを確認する
3. 確認結果
上記の確認方法で期待される動作が確認できたため、問題ない。

View File

@@ -0,0 +1,18 @@
#!/bin/sh
MCK_DIR=/home/satoken/ppos
REP_NUM=100
for i in `seq 1 ${REP_NUM}`
do
sudo ${MCK_DIR}/sbin/mcstop+release.sh
sleep 1
sudo ${MCK_DIR}/sbin/mcreboot.sh
if [ $? -ne 0 ]; then
echo "[NG] failed to boot Mckernel :${i}"
exit 1
fi
done
echo "[OK] succeed to boot McKernel ${i} times"