From 61dfca567e982f2d6a0a25b04e9eb78adcaac370 Mon Sep 17 00:00:00 2001 From: Flavio Cruz Date: Mon, 1 May 2023 22:52:19 -0400 Subject: Implement mig_deallocate to free memory when kernel server RPC succeeds In case the kernel interfaces use dynamically sized strings, we will end up calling mig_deallocate to free the out of line string that was copied into the kernel. As a matter of contract such type of data is freed automatically either in kernel code when the RPC fails or in the MiG stub if it succeeds. This was tested by changing task_set_name to use dynamic strings and making sure out of line data is passed when strlen(name) > 4. Message-Id: --- kern/ipc_mig.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/kern/ipc_mig.c b/kern/ipc_mig.c index d6171877..df8a9467 100644 --- a/kern/ipc_mig.c +++ b/kern/ipc_mig.c @@ -304,6 +304,16 @@ mig_strncpy(char *dest, const char *src, vm_size_t len) return dest - dest_; } +/* Called by MiG to deallocate memory, which in this case happens + * to be kernel memory. */ +void +mig_deallocate(vm_address_t addr, vm_size_t size) +{ + (void) size; + /* We do the same thing as in ipc_kmsg_clean_body. */ + vm_map_copy_discard((vm_map_copy_t) addr); +} + #define fast_send_right_lookup(name, port, abort) \ MACRO_BEGIN \ ipc_space_t space = current_space(); \ -- cgit v1.2.3