On Sat, 1 May 1999, Daniel Potts wrote:
Assume task A is the chief of task B, which is the chief of task C, which is the chief of task D. ;-)
- Now, D does an ipc call to A. A successfully receives the message from D
via the chiefs (C and B).
Now when A replies to this, the message first gets intercepted by B.
B sends a deceiting ipc to D with A as the virtual sender. This gets
intercepted by C.
- C sends a deceiting ipc to D with A as the virtual sender. This step
fails (?!) due to direction preservation not holding. That is when C checks nchief on A it returns L4_NC_OUTER_CLAN, and nchief on D returns L4_NC_SAME_CLAN, which is not equal, and therefore not direction preserving.
Have I got this scenario correct? Assuming that each chief can obtain the virtual sender as part of it's ipc api.
Whoops, I was wrong. Above I am returning incorrect values. nchief on D should return INNER_CLAN, and we xor the result such that this ipc call should work fine. The rules for checking the result of nchief for the vsender and dthread:
SAME & INNER -> ok OUTER & INNER -> ok otherwise it will fail the direction preservation test.
Daniel