mirror of
https://github.com/drasko/codezero.git
synced 2026-01-12 02:43:15 +01:00
In posix, test0 makes inter-space ipc for testing extended ipc. This correctly fails when only the cap to ipc to pager is given to all tasks in the container. In order to overcome this problem, the tasks who fork for doing ipc to each other make a request to the pager to get capabilities to do so. Pager finds its own widened ipc capability over the container, replicates it, validates and reduces it to desired boundaries (i.e. just ipc betw. two spaces) and grants it as IMMUTABLE to requesting tasks. This protocol may be useful in implementing a client/server capability request relationship. Code builds but untested.
32 lines
849 B
C
32 lines
849 B
C
/*
|
|
* Syscall API for capability manipulation
|
|
*
|
|
* Copyright (C) 2009 Bahadir Balban
|
|
*/
|
|
#ifndef __API_CAPABILITY_H__
|
|
#define __API_CAPABILITY_H__
|
|
|
|
/* Capability syscall request types */
|
|
#define CAP_CONTROL_NCAPS 0x00000000
|
|
#define CAP_CONTROL_READ 0x00000001
|
|
#define CAP_CONTROL_SHARE 0x00000002
|
|
#define CAP_CONTROL_GRANT 0x00000003
|
|
#define CAP_CONTROL_REPLICATE 0x00000005
|
|
#define CAP_CONTROL_SPLIT 0x00000006
|
|
#define CAP_CONTROL_DEDUCE 0x00000007
|
|
|
|
#define CAP_SHARE_MASK 0x00000003
|
|
#define CAP_SHARE_SINGLE 0x00000001
|
|
#define CAP_SHARE_ALL 0x00000002
|
|
|
|
#define CAP_GRANT_MASK 0x0000000F
|
|
#define CAP_GRANT_SINGLE 0x00000001
|
|
#define CAP_GRANT_ALL 0x00000002
|
|
#define CAP_GRANT_IMMUTABLE 0x00000004
|
|
|
|
/* Task's primary capability list */
|
|
#define TASK_CAP_LIST(task) \
|
|
(&((task)->space->cap_list))
|
|
|
|
#endif /* __API_CAPABILITY_H__ */
|