[kernel] Make capabilities/handles global
Instead of handles / capabilities having numeric ids that are only valid for the owning process, they are now global in a system capabilities table. This will allow for specifying capabilities in IPC that doesn't need to be kernel-controlled. Processes will still need to be granted access to given capabilities, but that can become a simpler system call than the current method of sending them through mailbox messages (and worse, having to translate every one into a new capability like was the case before). In order to track which handles a process has access to, a new node_set based on node_map allows for an efficient storage and lookup of handles.
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
#include <util/map.h>
|
||||
#include <util/spinlock.h>
|
||||
|
||||
#include "objects/handle.h"
|
||||
#include "objects/kobject.h"
|
||||
#include "slab_allocated.h"
|
||||
#include "wait_queue.h"
|
||||
@@ -26,11 +25,8 @@ public:
|
||||
|
||||
static constexpr kobject::type type = kobject::type::mailbox;
|
||||
|
||||
/// Max message data length
|
||||
constexpr static size_t max_data_length = 88;
|
||||
|
||||
/// Max message handle count
|
||||
constexpr static size_t max_handle_count = 6;
|
||||
constexpr static size_t max_handle_count = 5;
|
||||
|
||||
struct message;
|
||||
|
||||
@@ -91,18 +87,12 @@ struct mailbox::message :
|
||||
public slab_allocated<message, 1>
|
||||
{
|
||||
uint64_t tag;
|
||||
uint64_t badge;
|
||||
uint64_t subtag;
|
||||
|
||||
uint16_t reply_tag;
|
||||
|
||||
uint16_t reserved0;
|
||||
uint16_t reserved1;
|
||||
|
||||
uint8_t handle_count;
|
||||
uint8_t data_len;
|
||||
|
||||
handle handles[mailbox::max_handle_count];
|
||||
uint8_t data[mailbox::max_data_length];
|
||||
j6_handle_t handles[mailbox::max_handle_count];
|
||||
};
|
||||
|
||||
class mailbox::replyer
|
||||
|
||||
Reference in New Issue
Block a user