overlay_path: Fix resolution of symbolic link under /sys/
Change-Id: I650e72fb335aa72256d3b129a65c09bbd7cf26d3 Refs: #1463
This commit is contained in:
committed by
Masamichi Takagi
parent
09173d353c
commit
051c0dcdd8
@@ -3498,7 +3498,7 @@ checkexist_resolvelinks:
|
|||||||
if (buf[0] == '/') {
|
if (buf[0] == '/') {
|
||||||
/* cannot snprintf from same source and dest */
|
/* cannot snprintf from same source and dest */
|
||||||
n = snprintf(tmpbuf2, PATH_MAX, "%s/%s", buf,
|
n = snprintf(tmpbuf2, PATH_MAX, "%s/%s", buf,
|
||||||
linkpath);
|
linkpath + 1);
|
||||||
if (n >= PATH_MAX)
|
if (n >= PATH_MAX)
|
||||||
return in;
|
return in;
|
||||||
strcpy(tmpbuf, tmpbuf2);
|
strcpy(tmpbuf, tmpbuf2);
|
||||||
|
|||||||
58
test/issues/1463/C1463.sh
Executable file
58
test/issues/1463/C1463.sh
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
#/bin/sh
|
||||||
|
|
||||||
|
USELTP=0
|
||||||
|
USEOSTEST=0
|
||||||
|
|
||||||
|
. ../../common.sh
|
||||||
|
|
||||||
|
issue="1463"
|
||||||
|
tid=01
|
||||||
|
|
||||||
|
TEST_DIR="/tmp/test"
|
||||||
|
ABS_PATH="${TEST_DIR}"
|
||||||
|
REL_PATH="./test"
|
||||||
|
ABS_LN="${TEST_DIR}_1463_abs_ln"
|
||||||
|
REL_LN="${TEST_DIR}_1463_rel_ln"
|
||||||
|
|
||||||
|
mkdir -p ${TEST_DIR}
|
||||||
|
touch ${TEST_DIR}/L.dir
|
||||||
|
|
||||||
|
tname=`printf "C${issue}T%02d" ${tid}`
|
||||||
|
echo "*** ${tname} start *******************************"
|
||||||
|
ln -fns ${ABS_PATH} ${ABS_LN}
|
||||||
|
mcexec readlink ${ABS_LN}/L.dir | tee ./${tname}.txt
|
||||||
|
cnt=`grep "a.dir" ./${tname}.txt | wc -l`
|
||||||
|
if [ ${cnt} -eq 1 ]; then
|
||||||
|
echo "*** ${tname} PASSED ******************************"
|
||||||
|
else
|
||||||
|
echo "*** ${tname} FAILED ******************************"
|
||||||
|
fi
|
||||||
|
let tid++
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tname=`printf "C${issue}T%02d" ${tid}`
|
||||||
|
echo "*** ${tname} start *******************************"
|
||||||
|
ln -fns ${REL_PATH} ${REL_LN}
|
||||||
|
mcexec readlink ${REL_LN}/L.dir | tee ./${tname}.txt
|
||||||
|
cnt=`grep "a.dir" ./${tname}.txt | wc -l`
|
||||||
|
if [ ${cnt} -eq 1 ]; then
|
||||||
|
echo "*** ${tname} PASSED ******************************"
|
||||||
|
else
|
||||||
|
echo "*** ${tname} FAILED ******************************"
|
||||||
|
fi
|
||||||
|
let tid++
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
tname=`printf "C${issue}T%02d" ${tid}`
|
||||||
|
echo "*** ${tname} start *******************************"
|
||||||
|
mcexec cat /sys/devices/system/cpu/offline | tee ./${tname}.txt
|
||||||
|
echo "** (expected blank output)"
|
||||||
|
lines=`grep -e "[0-9]" ./${tname}.txt | wc -l`
|
||||||
|
if [ ${lines} -eq 0 ]; then
|
||||||
|
echo "*** ${tname} PASSED ******************************"
|
||||||
|
else
|
||||||
|
echo "*** ${tname} FAILED ******************************"
|
||||||
|
fi
|
||||||
|
let tid++
|
||||||
|
echo ""
|
||||||
|
|
||||||
12
test/issues/1463/Makefile
Normal file
12
test/issues/1463/Makefile
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
CFLAGS=
|
||||||
|
LDFLAGS=
|
||||||
|
|
||||||
|
TARGET=
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
test: all
|
||||||
|
sh ./C1463.sh
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGET) *.o *.txt
|
||||||
|
|
||||||
49
test/issues/1463/README
Normal file
49
test/issues/1463/README
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
【Issue#1463 動作確認】
|
||||||
|
□ テスト内容
|
||||||
|
Issue#1463の修正は、mcexec.c: mcoverlay_path() 内で行われる/sys/ 配下への
|
||||||
|
リンク解決処理に関する修正である。
|
||||||
|
上記のリンク解決処理を/tmp/ 配下にも行うようにするテストパッチを適用した上で
|
||||||
|
/tmp/ 配下へのmcoverlay_path()を実行して動作を確認する。
|
||||||
|
|
||||||
|
なお、リンク解決処理の動作確認には、McKernelによって作成される、
|
||||||
|
/sys/devices/virtual/mcos/mcos0/sys/test/L.dir を利用する。
|
||||||
|
このL.dirは、同ディレクトリのa.dir へのシンボリックリンクとなっている。
|
||||||
|
|
||||||
|
C1463T01:
|
||||||
|
以下の流れで、リンク解決処理対象パスの途中に絶対パスのシンボリックリンクが
|
||||||
|
存在している場合にも、/sys/devices/virtual/mcos/mcos0/sys/ 下に
|
||||||
|
誘導されることを確認する。
|
||||||
|
a. /tmp/test/L.dir に空のファイルを作成
|
||||||
|
b. /tmp/test への絶対パスのシンボリックリンクとして、/tmp/test_1463_abs_ln を作成
|
||||||
|
c. mcexec readlink /tmp/test_1463_abs_ln/L.dir を実行し、a.dir が出力されることを確認
|
||||||
|
|
||||||
|
C1463T02:
|
||||||
|
以下の流れで、リンク解決処理対象パスの途中に相対パスのシンボリックリンクが
|
||||||
|
存在している場合にも、/sys/devices/virtual/mcos/mcos0/sys/ 下に
|
||||||
|
誘導されることを確認する。
|
||||||
|
a. /tmp/test/L.dir に空のファイルを作成
|
||||||
|
b. /tmp/test への相対パスのシンボリックリンクとして、/tmp/test_1463_rel_ln を作成
|
||||||
|
c. mcexec readlink /tmp/test_1463_rel_ln/L.dir を実行し、a.dir が出力されることを確認
|
||||||
|
|
||||||
|
C1463T03:
|
||||||
|
以下の流れで、/sys/ 配下へのアクセスが/sys/devices/virtual/mcos/mcos0/sys/ 下に
|
||||||
|
誘導されることを確認する。
|
||||||
|
a. mcexecで確認した場合の /sys/devices/system/cpu/offline が空であることを確認
|
||||||
|
※通常、mckernelではofflineのCPUが存在しないため
|
||||||
|
|
||||||
|
□ 実行手順
|
||||||
|
・下記の手順でテストを実行する
|
||||||
|
$ cd <mckernel>
|
||||||
|
$ patch -p0 < test/issues/1463/tmp_overlay_path.patch
|
||||||
|
(build mckernel)
|
||||||
|
$ cd test/issues/1463
|
||||||
|
$ 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していることを確認。
|
||||||
15
test/issues/1463/aarch64_result.log
Normal file
15
test/issues/1463/aarch64_result.log
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
sh ./C1463.sh
|
||||||
|
mcstop+release.sh ... done
|
||||||
|
mcreboot.sh -c 37-43,49-55 -m 2G@2,2G@3 -r 37-43:36+49-55:48 -O ... done
|
||||||
|
*** C1463T01 start *******************************
|
||||||
|
a.dir
|
||||||
|
*** C1463T01 PASSED ******************************
|
||||||
|
|
||||||
|
*** C1463T02 start *******************************
|
||||||
|
a.dir
|
||||||
|
*** C1463T02 PASSED ******************************
|
||||||
|
|
||||||
|
*** C1463T03 start *******************************
|
||||||
|
|
||||||
|
** (expected blank output)
|
||||||
|
*** C1463T03 PASSED ******************************
|
||||||
17
test/issues/1463/tmp_overlay_path.patch
Normal file
17
test/issues/1463/tmp_overlay_path.patch
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
diff --git executer/user/mcexec.c executer/user/mcexec.c
|
||||||
|
index acae1f8..d220dd9 100644
|
||||||
|
--- executer/user/mcexec.c
|
||||||
|
+++ executer/user/mcexec.c
|
||||||
|
@@ -3458,6 +3458,12 @@ overlay_path(int dirfd, const char *in, char *buf, int *resolvelinks)
|
||||||
|
goto checkexist_resolvelinks;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* for #1463's test */
|
||||||
|
+ if (!strncmp(path, "/tmp", 4) &&
|
||||||
|
+ (path[4] == '/' || path[4] == '\0')) {
|
||||||
|
+ goto checkexist_resolvelinks;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return in;
|
||||||
|
|
||||||
|
checkexist_resolvelinks:
|
||||||
15
test/issues/1463/x86_64_result.log
Normal file
15
test/issues/1463/x86_64_result.log
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
sh ./C1463.sh
|
||||||
|
mcstop+release.sh ... done
|
||||||
|
mcreboot.sh -c 1-7,9-15,17-23,25-31 -m 10G@0,10G@1 -r 1-7:0+9-15:8+17-23:16+25-31:24 -O ... done
|
||||||
|
*** C1463T01 start *******************************
|
||||||
|
a.dir
|
||||||
|
*** C1463T01 PASSED ******************************
|
||||||
|
|
||||||
|
*** C1463T02 start *******************************
|
||||||
|
a.dir
|
||||||
|
*** C1463T02 PASSED ******************************
|
||||||
|
|
||||||
|
*** C1463T03 start *******************************
|
||||||
|
|
||||||
|
** (expected blank output)
|
||||||
|
*** C1463T03 PASSED ******************************
|
||||||
Reference in New Issue
Block a user