From 3d0c30e6697b2b6ae77a03adefa2a8b81ebe4d92 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sun, 21 Mar 2021 14:31:08 +0100 Subject: Cleaner shared memory implementation --- libc/sys.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'libc/sys.c') diff --git a/libc/sys.c b/libc/sys.c index b40b84d..491c37c 100644 --- a/libc/sys.c +++ b/libc/sys.c @@ -2,6 +2,7 @@ // Syscall implementation #include +#include #include #include @@ -78,25 +79,25 @@ res sys5(enum sys num, int d1, int d2, int d3, int d4, int d5) * Syscalls */ -void *sys_alloc(u32 size) +res sys_alloc(u32 size, u32 *addr) { - return (void *)sys1(SYS_ALLOC, (int)size); + u32 id = 0; + return sys4(SYS_ALLOC, (int)size, (int)addr, (int)&id, 0); } -res shalloc(u32 size, u32 *id) +res sys_free(void *ptr) { - return (res)sys2(SYS_SHALLOC, (int)size, (int)id); + return sys1(SYS_FREE, (int)ptr); } -res shaccess(u32 id, u32 *addr, u32 *size) +res shalloc(u32 size, u32 *addr, u32 *id) { - return (res)sys3(SYS_SHACCESS, (int)id, (int)addr, (int)size); + return sys4(SYS_ALLOC, (int)size, (int)addr, (int)id, 1); } -// TODO: Freeing by ptr + size could be a security risk -> only by address! -void sys_free(void *ptr, u32 size) +res shaccess(u32 id, u32 *addr, u32 *size) { - sys2(SYS_FREE, (int)ptr, (int)size); + return sys3(SYS_SHACCESS, (int)id, (int)addr, (int)size); } void loop(void) -- cgit v1.2.3