[Zion] Add a syscall to get a memory object's length.

This commit is contained in:
Drew Galbraith 2023-11-19 19:02:55 -08:00
parent 30b6511467
commit 2e4a12661d
5 changed files with 15 additions and 1 deletions

View file

@ -33,7 +33,6 @@ z_err_t MemoryObjectCreateContiguous(ZMemoryObjectCreateContiguousReq* req) {
z_err_t MemoryObjectDuplicate(ZMemoryObjectDuplicateReq* req) {
auto& curr_proc = gScheduler->CurrentProcess();
auto vmmo_cap = curr_proc.GetCapability(req->vmmo_cap);
// FIXME: Check a duplication permission here.
RET_ERR(ValidateCapability<MemoryObject>(vmmo_cap, kZionPerm_Duplicate));
ASSIGN_OR_RETURN(
@ -43,3 +42,14 @@ z_err_t MemoryObjectDuplicate(ZMemoryObjectDuplicateReq* req) {
curr_proc.AddNewCapability(new_vmmo, vmmo_cap->permissions());
return glcr::OK;
}
z_err_t MemoryObjectInspect(ZMemoryObjectInspectReq* req) {
auto& curr_proc = gScheduler->CurrentProcess();
auto vmmo_cap = curr_proc.GetCapability(req->vmmo_cap);
RET_ERR(ValidateCapability<MemoryObject>(vmmo_cap, kZionPerm_Read));
auto vmmo = vmmo_cap->obj<MemoryObject>();
*req->size = vmmo->size();
return glcr::OK;
}

View file

@ -6,3 +6,4 @@ z_err_t MemoryObjectCreate(ZMemoryObjectCreateReq* req);
z_err_t MemoryObjectCreatePhysical(ZMemoryObjectCreatePhysicalReq* req);
z_err_t MemoryObjectCreateContiguous(ZMemoryObjectCreateContiguousReq* req);
z_err_t MemoryObjectDuplicate(ZMemoryObjectDuplicateReq* req);
z_err_t MemoryObjectInspect(ZMemoryObjectInspectReq* req);

View file

@ -66,6 +66,7 @@ extern "C" z_err_t SyscallHandler(uint64_t call_id, void* req) {
CASE(MemoryObjectCreatePhysical);
CASE(MemoryObjectCreateContiguous);
CASE(MemoryObjectDuplicate);
CASE(MemoryObjectInspect);
// syscall/ipc.h
CASE(ChannelCreate);
CASE(ChannelSend);