Skip to content

aspカーネルのサービスコールのIDチェックに関して #153

Discussion options

You must be logged in to vote

!のかかっている範囲の関係で読みにくいマクロになっていますが,元の通りで正しいと考えます。
おそらく,!のかかっている範囲を読み違えられているものと思います。

まず,VALID_TSKID(tskid)は,tskidが正しい範囲(1〜最大値)に真になります。
次に,VALID_TSKID(tskid) || (tskid) == TSK_SELFで,tskidが正しい範囲か0になっている場合に真になります。
最後に,それに!がかかっていますので,(tskidが正しい範囲か0)でない場合に真になります。

正しいと思われるマクロ:
#define CHECK_TSKID_SELF(tskid) do {
if (!(VALID_TSKID(tskid) && (tskid) != TSK_SELF)) {
ercd = E_ID;
goto error_exit;
}
} while (false)

!がかかっている範囲がVALID_TSKID(tskid)のみであれば,&& (tskid) != TSK_SELFが来るのが正しいですが,!VALID_TSKID(tskid) || (tskid) == TSK_SELF全体にかかっているので,元のプログラムで正しいです。

Replies: 1 comment 1 reply

Comment options

You must be logged in to vote
1 reply
@Ryohsuke-Takeuchi
Comment options

Answer selected by hiroakitakada
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants