From b2618a98f5c1c58ed57166d33cb7277d482aab22 Mon Sep 17 00:00:00 2001 From: "TOIDA,Suguru" Date: Fri, 6 Mar 2020 15:02:38 +0900 Subject: [PATCH] madvise: Support MADV_DONTDUMP and MADV_DODUMP on anonymous map Change-Id: I231b62ed6803b797ec749ac70a66cdf8236204bd refs: #1373 --- kernel/syscall.c | 2 + test/issues/1373/README | 23 ++++++++++ .../1373/madvise08-mck-core-pattern.patch | 27 ++++++++++++ test/issues/1373/result.log | 42 +++++++++++++++++++ test/issues/1373/run.sh | 32 ++++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 test/issues/1373/README create mode 100644 test/issues/1373/madvise08-mck-core-pattern.patch create mode 100644 test/issues/1373/result.log create mode 100755 test/issues/1373/run.sh diff --git a/kernel/syscall.c b/kernel/syscall.c index f810e85b..b99c1361 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -5383,6 +5383,8 @@ SYSCALL_DECLARE(madvise) } } else if(advice == MADV_DONTFORK || advice == MADV_DOFORK); + else if (advice == MADV_DONTDUMP || advice == MADV_DODUMP) { + } else if (advice == MADV_NORMAL) { /* * Normally, the settings of MADV_RANDOM and diff --git a/test/issues/1373/README b/test/issues/1373/README new file mode 100644 index 00000000..716543db --- /dev/null +++ b/test/issues/1373/README @@ -0,0 +1,23 @@ +/* REDME COPYRIGHT FUJITSU LIMITED 2020 */ + +ltp: madvise08: MADV_{DONT,DO}DUMPが期待通りに動作しない。 +https://postpeta.pccluster.org/redmine/issues/1373 + +テストセットREADME + +(0) 事前準備 + 1. LTP に madvise08-mck-core-pattern.patch を適用 + 2. LTP のビルド及びインストール + 3. $HOME/.mck_test_configを用意する + +(1) テスト実行方法 + 1. ./run.sh + +(2) テスト項目詳細 + + LTPの下記項目を実行し期待通りに動作することを確認する + "test OK." が書き出されれば合格判定となる。具体例はresult.logを参照。 + - madvise08 + - madvise10 + +以上。 diff --git a/test/issues/1373/madvise08-mck-core-pattern.patch b/test/issues/1373/madvise08-mck-core-pattern.patch new file mode 100644 index 00000000..72f78192 --- /dev/null +++ b/test/issues/1373/madvise08-mck-core-pattern.patch @@ -0,0 +1,27 @@ +madvise08-mck-core-pattern.patch COPYRIGHT FUJITSU LIMITED 2020 +diff --git a/testcases/kernel/syscalls/madvise/madvise08.c b/testcases/kernel/syscalls/madvise/madvise08.c +index a6fd967..4cdba31 100644 +--- a/testcases/kernel/syscalls/madvise/madvise08.c ++++ b/testcases/kernel/syscalls/madvise/madvise08.c +@@ -87,9 +87,9 @@ static void setup(void) + tst_res(TINFO, "System core pattern is '%s'", cpattern); + + SAFE_GETCWD(cwd, sizeof(cwd)); +- snprintf(tmpcpattern, sizeof(tmpcpattern), "%s/dump-%%p", cwd); +- tst_res(TINFO, "Temporary core pattern is '%s'", tmpcpattern); +- SAFE_FILE_PRINTF(CORE_PATTERN, "%s", tmpcpattern); ++ snprintf(tmpcpattern, sizeof(tmpcpattern), "%s/mccore-madvise08.%%p", cwd); ++ tst_res(TINFO, "McKernel core pattern is '%s'", tmpcpattern); ++ //SAFE_FILE_PRINTF(CORE_PATTERN, "%s", tmpcpattern); + + fmem = SAFE_MMAP(NULL, + FMEMSIZE, +@@ -129,7 +129,7 @@ static int find_sequence(int pid) + int ycount = 0; + char dumpname[256]; + +- snprintf(dumpname, 256, "dump-%d", pid); ++ snprintf(dumpname, 256, "mccore-madvise08.%d", pid); + tst_res(TINFO, "Dump file should be %s", dumpname); + if (access(dumpname, F_OK)) + tst_brk(TBROK | TERRNO, "Dump file was not found."); diff --git a/test/issues/1373/result.log b/test/issues/1373/result.log new file mode 100644 index 00000000..efc609df --- /dev/null +++ b/test/issues/1373/result.log @@ -0,0 +1,42 @@ +[root@hostname 1373]# ./run.sh +mcstop+release.sh ... done +mcreboot.sh -c 12-59 -m 512M@4 ... done +test run. +tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s +madvise08.c:87: INFO: System core pattern is '|/usr/lib/systemd/systemd-coredump' +madvise08.c:91: INFO: McKernel core pattern is '/tmp/l2JnVb/mccore-madvise08.%p' +madvise08.c:133: INFO: Dump file should be mccore-madvise08.17555 +madvise08.c:217: PASS: madvise(..., MADV_DONTDUMP) +madvise08.c:133: INFO: Dump file should be mccore-madvise08.17606 +madvise08.c:221: PASS: madvise(..., MADV_DODUMP) + +Summary: +passed 2 +failed 0 +skipped 0 +warnings 0 +tst_test.c:1096: INFO: Timeout per run is 0h 05m 00s +madvise10.c:143: INFO: MADV_WIPEONFORK zeroes memory in child +madvise10.c:117: PASS: madvise(0x1000001c0000, 16384, 0x0) +madvise10.c:117: PASS: madvise(0x1000001c0000, 16384, 0x12) +madvise10.c:98: PASS: In PID 17758, Matched expected pattern +madvise10.c:143: INFO: MADV_WIPEONFORK with zero length does nothing +madvise10.c:117: PASS: madvise(0x1000001d0000, 0, 0x0) +madvise10.c:117: PASS: madvise(0x1000001d0000, 0, 0x12) +madvise10.c:98: PASS: In PID 17808, Matched expected pattern +madvise10.c:143: INFO: MADV_WIPEONFORK zeroes memory in grand-child +madvise10.c:117: PASS: madvise(0x1000001e0000, 16384, 0x0) +madvise10.c:117: PASS: madvise(0x1000001e0000, 16384, 0x12) +madvise10.c:98: PASS: In PID 17908, Matched expected pattern +madvise10.c:143: INFO: MADV_KEEPONFORK will undo MADV_WIPEONFORK +madvise10.c:117: PASS: madvise(0x1000001f0000, 16384, 0x12) +madvise10.c:117: PASS: madvise(0x1000001f0000, 16384, 0x13) +madvise10.c:98: PASS: In PID 17958, Matched expected pattern + +Summary: +passed 12 +failed 0 +skipped 0 +warnings 0 +test OK. +mcstop+release.sh ... done diff --git a/test/issues/1373/run.sh b/test/issues/1373/run.sh new file mode 100755 index 00000000..78233a12 --- /dev/null +++ b/test/issues/1373/run.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# run.sh COPYRIGHT FUJITSU LIMITED 2020 + +# load setting and booting mck. +USELTP=1 +. ../../common.sh +chmod 777 /dev/mcos* + +echo "test run." +ltp=`cat <<__EOL__ +madvise08 +madvise10 +__EOL__` + +FAIL=0 +for tp in $ltp +do + pushd ${LTPBIN} > /dev/null + ${MCEXEC} ${LTPBIN}/${tp} + if [ $? -ne 0 ]; then + FAIL=1 + fi + popd > /dev/null +done + +if [ ${FAIL} -eq 1 ]; then + echo "test NG." +else + echo "test OK." +fi + +mcstop