From 620bd6af8e005057e04c8a2891c7537ec3556345 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sun, 17 Jul 2022 20:59:23 +0200 Subject: amd64: ensure all addresses are canonical --- src/user/tests/main.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'src/user') diff --git a/src/user/tests/main.c b/src/user/tests/main.c index b4587f9..ab6b4a8 100644 --- a/src/user/tests/main.c +++ b/src/user/tests/main.c @@ -189,13 +189,35 @@ static void test_malloc(void) { } static void test_efault(void) { + const char *str = "o, 16 characters"; + char str2[16]; char *invalid = (void*)0x1000; handle_t h; + memcpy(str2, str, 16); + assert((h = _syscall_open(tmpfilepath, strlen(tmpfilepath), OPEN_CREATE))); - assert(_syscall_write(h, "dzwdz sucks ass!", 16, 0) == 16); + assert(_syscall_write(h, str, 16, 0) == 16); + assert(_syscall_write(h, str2, 16, 0) == 16); + assert(_syscall_write(h, invalid, 16, 0) == -EFAULT); - assert(_syscall_write(h, "dzwdz is cool!!!", 16, 0) == 16); + + /* x64 canonical pointers */ + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x8000000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x1000000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x0100000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x0010000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x0001000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str ^ 0x0000800000000000), 16, 0) == -EFAULT); + + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x8000000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x1000000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x0100000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x0010000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x0001000000000000), 16, 0) == -EFAULT); + assert(_syscall_write(h, (void*)((uintptr_t)str2 ^ 0x0000800000000000), 16, 0) == -EFAULT); + + assert(_syscall_write(h, str, 16, 0) == 16); close(h); } -- cgit v1.2.3