aspカーネルのサービスコールのIDチェックに関して #153
-
aspカーネルのソースを参照していて、以下のマクロの判定が間違っているのに気が付きました。 CHECK_TSKID_SELFはタスクIDとTSK_SELFを判定するマクロですが、 |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
まず,
|
Beta Was this translation helpful? Give feedback.
!
のかかっている範囲の関係で読みにくいマクロになっていますが,元の通りで正しいと考えます。おそらく,
!
のかかっている範囲を読み違えられているものと思います。まず,
VALID_TSKID(tskid)
は,tskidが正しい範囲(1〜最大値)に真になります。次に,
VALID_TSKID(tskid) || (tskid) == TSK_SELF
で,tskidが正しい範囲か0になっている場合に真になります。最後に,それに
!
がかかっていますので,(tskidが正しい範囲か0)でない場合に真になります。!
がかかっている範囲がVALID_TSKID(tskid)
のみであれば,&& (tskid) != TSK_SELF
が来るのが正しいですが,!
がVALID_TSKID(tskid) || (tskid) == TSK_SELF
全体にかかっているので,元のプログラムで正しいです。