sched_getaffinity: Check arguments in the same order as in Linux
(1) Check if size is large enough (2) Check if size is positive Fujitsu: POSTK_DEBUG_TEMP_FIX_5 Refs: #1121 Change-Id: I3e41720c89ef89294820f7f4fa8df1a69a7011b0
This commit is contained in:
committed by
Dominique Martinet
parent
11756d96ef
commit
e7b6a3472b
@ -6793,22 +6793,14 @@ SYSCALL_DECLARE(sched_getaffinity)
|
||||
int ret;
|
||||
|
||||
dkprintf("%s() len: %d, mask: %p\n", __FUNCTION__, len, u_cpu_set);
|
||||
#ifdef POSTK_DEBUG_TEMP_FIX_5 /* sched_getaffinity arguments check add (S64FX_10) */
|
||||
if (len * 8 < num_processors) {
|
||||
kprintf("%s:%d Too small buffer.\n", __FILE__, __LINE__);
|
||||
dkprintf("%s: Too small buffer.\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (len & (sizeof(unsigned long)-1)) {
|
||||
kprintf("%s:%d Size not align to unsigned long.\n", __FILE__, __LINE__);
|
||||
dkprintf("%s: Size not align to unsigned long.\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
#else /* POSTK_DEBUG_TEMP_FIX_5 */
|
||||
if (!len || u_cpu_set == (cpu_set_t *)-1)
|
||||
return -EINVAL;
|
||||
|
||||
if ((len * BITS_PER_BYTE) < __CPU_SETSIZE)
|
||||
return -EINVAL;
|
||||
#endif /* POSTK_DEBUG_TEMP_FIX_5 */
|
||||
|
||||
len = MIN2(len, sizeof(k_cpu_set));
|
||||
|
||||
|
||||
108
test/issues/1121/C1121.sh
Normal file
108
test/issues/1121/C1121.sh
Normal file
@ -0,0 +1,108 @@
|
||||
#!/bin/sh
|
||||
BIN=
|
||||
SBIN=
|
||||
OSTEST=
|
||||
LTP=
|
||||
BOOTPARAM="-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"
|
||||
|
||||
if [ -f ../../../config.h ]; then
|
||||
str=`grep "^#define BINDIR " ../../../config.h | head -1 | sed 's/^#define BINDIR /BINDIR=/'`
|
||||
eval $str
|
||||
fi
|
||||
if [ "x$BINDIR" = x ];then
|
||||
BINDIR="$BIN"
|
||||
fi
|
||||
|
||||
if [ -f ../../../Makefile ]; then
|
||||
str=`grep ^SBINDIR ../../../Makefile | head -1 | sed 's/ //g'`
|
||||
eval $str
|
||||
fi
|
||||
if [ "x$SBINDIR" = x ];then
|
||||
SBINDIR="$SBIN"
|
||||
fi
|
||||
|
||||
if [ -f $HOME/ltp/testcases/bin/sched_setaffinity01 ]; then
|
||||
LTPDIR=$HOME/ltp/testcases
|
||||
fi
|
||||
if [ "x$LTPDIR" = x ]; then
|
||||
LTPDIR="$LTP"
|
||||
fi
|
||||
|
||||
if [ -f $HOME/ostest/bin/test_mck ]; then
|
||||
OSTESTDIR=$HOME/ostest/
|
||||
fi
|
||||
if [ "x$OSTESTDIR" = x ]; then
|
||||
OSTESTDIR="$OSTEST"
|
||||
fi
|
||||
|
||||
if [ ! -x $SBINDIR/mcstop+release.sh ]; then
|
||||
echo mcstop+releas: not found >&2
|
||||
exit 1
|
||||
fi
|
||||
echo -n "mcstop+release.sh ... "
|
||||
sudo $SBINDIR/mcstop+release.sh
|
||||
echo "done"
|
||||
|
||||
if [ ! -x $SBINDIR/mcreboot.sh ]; then
|
||||
echo mcreboot: not found >&2
|
||||
exit 1
|
||||
fi
|
||||
echo -n "mcreboot.sh $BOOTPARAM ... "
|
||||
sudo $SBINDIR/mcreboot.sh $BOOTPARAM
|
||||
echo "done"
|
||||
|
||||
if [ ! -x $BINDIR/mcexec ]; then
|
||||
echo mcexec: not found >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tid=001
|
||||
echo "*** RT_$tid start *******************************"
|
||||
sudo $BINDIR/mcexec $OSTESTDIR/bin/test_mck -s sched_setaffinity -n 0 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||
if grep "RESULT: ok" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||
echo "*** RT_$tid: PASSED"
|
||||
else
|
||||
echo "*** RT_$tid: FAILED"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
tid=002
|
||||
echo "*** RT_$tid start *******************************"
|
||||
sudo $BINDIR/mcexec $OSTESTDIR/bin/test_mck -s sched_setaffinity -n 1 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||
if grep "RESULT: ok" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||
echo "*** RT_$tid: PASSED"
|
||||
else
|
||||
echo "*** RT_$tid: FAILED"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
tid=003
|
||||
echo "*** RT_$tid start *******************************"
|
||||
sudo $BINDIR/mcexec $OSTESTDIR/bin/test_mck -s sched_getaffinity -n 3 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||
if grep "RESULT: ok" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||
echo "*** RT_$tid: PASSED"
|
||||
else
|
||||
echo "*** RT_$tid: FAILED"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
tid=004
|
||||
echo "*** RT_$tid start *******************************"
|
||||
sudo $BINDIR/mcexec $OSTESTDIR/bin/test_mck -s sched_getaffinity -n 5 -- -p 20 2>&1 | tee ./RT_${tid}.txt
|
||||
if grep "RESULT: ok" ./RT_${tid}.txt > /dev/null 2>&1 ; then
|
||||
echo "*** RT_$tid: PASSED"
|
||||
else
|
||||
echo "*** RT_$tid: FAILED"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
tid=001
|
||||
echo "*** LT_$tid start *******************************"
|
||||
sudo $BINDIR/mcexec $LTPDIR/bin/sched_setaffinity01 2>&1 | tee ./LT_${tid}.txt
|
||||
ok=`grep TPASS LT_${tid}.txt | wc -l`
|
||||
ng=`grep TFAIL LT_${tid}.txt | wc -l`
|
||||
if [ $ng = 0 ]; then
|
||||
echo "*** LT_$tid: PASSED (ok:$ok)"
|
||||
else
|
||||
echo "*** LT_$tid: FAILED (ok:$ok, ng:$ng)"
|
||||
fi
|
||||
14
test/issues/1121/Makefile
Normal file
14
test/issues/1121/Makefile
Normal file
@ -0,0 +1,14 @@
|
||||
CC = gcc
|
||||
TARGET=
|
||||
|
||||
CPPFLAGS =
|
||||
LDFLAGS =
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
test: all
|
||||
@sh ./C1121.sh
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET) *.o
|
||||
|
||||
36
test/issues/1121/README
Normal file
36
test/issues/1121/README
Normal file
@ -0,0 +1,36 @@
|
||||
【Issue#1121 動作確認】
|
||||
□ テスト内容
|
||||
1. Issueで報告された再現プログラムでの確認
|
||||
RT_001: ostest-sched_setaffinity.000
|
||||
自プロセスのaffinityの設定と取得が行えることを確認
|
||||
|
||||
RT_002: ostest-sched_setaffinity.001
|
||||
自プロセスのaffinityを設定し、CPUのmigrateができることを確認
|
||||
|
||||
RT_003: ostest-sched_getaffinity.003
|
||||
存在しないプロセスIDを指定したsched_getaffinity()を実行し、
|
||||
-1 が返り、errnoにESRCH が設定されることを確認
|
||||
|
||||
RT_004: ostest-sched_getaffinity.005
|
||||
子プロセスを生成し、以下を確認
|
||||
- 子プロセスが親プロセスのaffinityを取得
|
||||
- 子プロセスが自プロセスのaffinityを取得
|
||||
- 親プロセス、自プロセスから取得したaffinityが等しいことを確認
|
||||
|
||||
2. 既存のsched_setaffinity機能に影響がないことをLTPを用いて確認
|
||||
LT_001: ltp-sched_setaffinity01
|
||||
異常な引数を指定した際に返される値と
|
||||
設定されるerrnoが正しいことを確認 (OK 4件)
|
||||
|
||||
□ 実行手順
|
||||
$ make test
|
||||
|
||||
実行できない場合は、C1121.shの以下の行を適切に書き換えた後に実行。
|
||||
BIN= mcexec が存在するパス
|
||||
SBIN= mcreboot.sh が存在するパス
|
||||
OSTEST= OSTESTが存在するパス
|
||||
LTP= LTPが存在するパス
|
||||
|
||||
□ 実行結果
|
||||
result.log 参照。
|
||||
すべての項目をPASSしていることを確認。
|
||||
35
test/issues/1121/result.log
Normal file
35
test/issues/1121/result.log
Normal file
@ -0,0 +1,35 @@
|
||||
*** RT_001 start *******************************
|
||||
TEST_SUITE: sched_setaffinity
|
||||
TEST_NUMBER: 0
|
||||
ARGS: -p 20
|
||||
RESULT: ok
|
||||
*** RT_001: PASSED
|
||||
|
||||
*** RT_002 start *******************************
|
||||
TEST_SUITE: sched_setaffinity
|
||||
TEST_NUMBER: 1
|
||||
ARGS: -p 20
|
||||
RESULT: ok
|
||||
*** RT_002: PASSED
|
||||
|
||||
*** RT_003 start *******************************
|
||||
TEST_SUITE: sched_getaffinity
|
||||
TEST_NUMBER: 3
|
||||
ARGS: -p 20
|
||||
sched_getaffinity result:-1, errno:3 (expect error is "ESRCH"=3)
|
||||
RESULT: ok
|
||||
*** RT_003: PASSED
|
||||
|
||||
*** RT_004 start *******************************
|
||||
TEST_SUITE: sched_getaffinity
|
||||
TEST_NUMBER: 5
|
||||
ARGS: -p 20
|
||||
RESULT: ok
|
||||
*** RT_004: PASSED
|
||||
|
||||
*** LT_001 start *******************************
|
||||
sched_setaffinity01 1 TPASS : expected failure with 'Bad address'
|
||||
sched_setaffinity01 2 TPASS : expected failure with 'Invalid argument'
|
||||
sched_setaffinity01 3 TPASS : expected failure with 'No such process'
|
||||
sched_setaffinity01 4 TPASS : expected failure with 'Operation not permitted'
|
||||
*** LT_001: PASSED (ok:4)
|
||||
Reference in New Issue
Block a user