diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-03 21:32:29 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-10-03 21:32:29 -0400 |
| commit | 465cba0c00bfc5d89bf10ce353b0adf40bdc098d (patch) | |
| tree | 914fd856946800199e2191dda1659ba9ccd55978 /sys/syscall_initrd_file.c | |
| parent | 153ac5fa0b8c4d178bf7590f0344612c6c3eaa70 (diff) | |
| download | jove-kernel-465cba0c00bfc5d89bf10ce353b0adf40bdc098d.tar.gz jove-kernel-465cba0c00bfc5d89bf10ce353b0adf40bdc098d.tar.bz2 jove-kernel-465cba0c00bfc5d89bf10ce353b0adf40bdc098d.zip | |
unmap message object used for syscalls
Diffstat (limited to 'sys/syscall_initrd_file.c')
| -rw-r--r-- | sys/syscall_initrd_file.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/syscall_initrd_file.c b/sys/syscall_initrd_file.c index 8e34488..904039d 100644 --- a/sys/syscall_initrd_file.c +++ b/sys/syscall_initrd_file.c @@ -8,16 +8,17 @@ int s_syscall_initrd_file_name( jove_owned_obj_t *initrd_file, - jove_owned_obj_t *message) + jove_owned_obj_t *message, + void *message_data) { const char *filename = initrd_file_name(initrd_file); size_t filename_len = strlen(filename); - size_t bytes_left = message_len(message); + size_t bytes_left = 0x1000; size_t bytes_needed = filename_len + sizeof(struct syscall_initrd_file_name_ret); CHECK_TOOSMALL(bytes_needed, bytes_left, "Message is too small for file name."); - struct syscall_initrd_file_name_ret *payload = message_data(message); + struct syscall_initrd_file_name_ret *payload = message_data; payload->len = filename_len; memcpy(payload->c_str, filename, filename_len); @@ -34,6 +35,7 @@ int s_syscall_initrd_file_read( jove_owned_obj_t *initrd_file, jove_owned_obj_t *message, + void *message_data, size_t bytes_left, void *payload_data) { @@ -44,7 +46,7 @@ s_syscall_initrd_file_read( struct syscall_initrd_file_read *payload = payload_data; bytes_needed = payload->read_size; - bytes_left = message_len(message); + bytes_left = 0x1000; //Ensure that the message is big enough to hold the read file data. CHECK_TOOSMALL(bytes_needed, bytes_left, @@ -67,8 +69,7 @@ s_syscall_initrd_file_read( return -ETOOBIG; } - void *read_data = message_data(message); - memcpy(read_data, file_data + payload->start_index, payload->read_size); + memcpy(message_data, file_data + payload->start_index, payload->read_size); return 0; } @@ -79,7 +80,7 @@ _syscall_handle_initrd_file(syscall_context_t *ctx) case SYSCALL_INITRD_FILE_NAME: if(ctx->target.permissions & SYSCALL_PERM_INITRD_FILE_NAME) return s_syscall_initrd_file_name( - ctx->target.obj, ctx->message.obj); + ctx->target.obj, ctx->message.obj, (void*)ctx->header); return -EPERM; case SYSCALL_INITRD_FILE_SIZE: @@ -90,7 +91,7 @@ _syscall_handle_initrd_file(syscall_context_t *ctx) case SYSCALL_INITRD_FILE_READ: if(ctx->target.permissions & SYSCALL_PERM_INITRD_FILE_READ) return s_syscall_initrd_file_read( - ctx->target.obj, ctx->message.obj, ctx->bytes_left, ctx->payload); + ctx->target.obj, ctx->message.obj, (void*)ctx->header, ctx->bytes_left, ctx->payload); return -EPERM; default: return -EBADCALL; |
