From c02aa084d1d2c15dd3a84f56f4c00f37a6e3da4a Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Fri, 14 Oct 2022 21:55:46 -0700 Subject: [PATCH] [kernel] Allow for not passing handles in new mailbox calls In the new mailbox structure, passing a j6_handle_invalid with a message would result in a permission denied result, as the process did not have a handle "0". --- src/kernel/syscalls/helpers.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/kernel/syscalls/helpers.h b/src/kernel/syscalls/helpers.h index 95ca96a..c560453 100644 --- a/src/kernel/syscalls/helpers.h +++ b/src/kernel/syscalls/helpers.h @@ -25,6 +25,11 @@ T * construct_handle(j6_handle_t *id, Args... args) template j6_status_t get_handle(j6_handle_t id, j6_cap_t caps, T *&object) { + if (id == j6_handle_invalid) { + object = nullptr; + return j6_status_ok; + } + capability *capdata = g_cap_table.find(id); if (!capdata || capdata->type != T::type) return j6_err_invalid_arg; @@ -46,6 +51,11 @@ inline j6_status_t get_handle(j6_handle_t *id, j6_cap_t caps, T *&object) template <> inline j6_status_t get_handle(j6_handle_t id, j6_cap_t caps, obj::kobject *&object) { + if (id == j6_handle_invalid) { + object = nullptr; + return j6_status_ok; + } + capability *capdata = g_cap_table.find(id); if (!capdata) return j6_err_invalid_arg;