IPC privileges fixes
Kernel: o Remove s_ipc_sendrec, instead using s_ipc_to for all send primitives o Centralize s_ipc_to bit manipulation, - disallowing assignment of bits pointing to unused priv structs; - preventing send-to-self by not setting bit for own priv struct; - preserving send mask matrix symmetry in all cases o Add IPC send mask checks to SENDA, which were missing entirely somehow o Slightly improve IPC stats accounting for SENDA o Remove SYSTEM from user processes' send mask o Half-fix the dependency between boot image order and process numbers, - correcting the table order of the boot processes; - documenting the order requirement needed for proper send masks; - warning at boot time if the order is violated RS: o Add support in /etc/drivers.conf for servers that talk to user processes, - disallowing IPC to user processes if no "ipc" field is present - adding a special "USER" label to explicitly allow IPC to user processes o Always apply IPC masks when specified; remove -i flag from service(8) o Use kernel send mask symmetry to delay adding IPC permissions for labels that do not exist yet, adding them to that label's process upon creation o Add VM to ipc permissions list for rtl8139 and fxp in drivers.conf Left to future fixes: o Removal of the table order vs process numbers dependency altogether, possibly using per-process send list structures as used for SYSTEM calls o Proper assignment of send masks to boot processes; some of the assigned (~0) masks are much wider than necessary o Proper assignment of IPC send masks for many more servers in drivers.conf o Removal of the debugging warning about the now legitimate case where RS's add_forward_ipc cannot find the IPC destination's label yet
This commit is contained in:
@@ -36,9 +36,7 @@ struct priv {
|
||||
*/
|
||||
|
||||
short s_trap_mask; /* allowed system call traps */
|
||||
sys_map_t s_ipc_from; /* allowed callers to receive from */
|
||||
sys_map_t s_ipc_to; /* allowed destination processes */
|
||||
sys_map_t s_ipc_sendrec; /* allowed sendrec processes */
|
||||
|
||||
/* allowed kernel calls */
|
||||
#define CALL_MASK_SIZE BITMAP_CHUNKS(NR_SYS_CALLS)
|
||||
@@ -78,6 +76,8 @@ struct priv {
|
||||
#define id_to_nr(id) priv_addr(id)->s_proc_nr
|
||||
#define nr_to_id(nr) priv(proc_addr(nr))->s_id
|
||||
|
||||
#define may_send_to(rp, nr) (get_sys_bit(priv(rp)->s_ipc_to, nr_to_id(nr)))
|
||||
|
||||
/* The system structures table and pointers to individual table slots. The
|
||||
* pointers allow faster access because now a process entry can be found by
|
||||
* indexing the psys_addr array, while accessing an element i requires a
|
||||
|
||||
Reference in New Issue
Block a user