Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1058)

Unified Diff: tests/minsfi/test_pointer_conversion.c

Issue 546883003: MinSFI: Passing arguments to the entry function (Closed) Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« tests/minsfi/test_invoke_args.c ('K') | « tests/minsfi/test_invoke_args.c ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/minsfi/test_pointer_conversion.c
diff --git a/tests/minsfi/test_pointer_conversion.c b/tests/minsfi/test_pointer_conversion.c
new file mode 100644
index 0000000000000000000000000000000000000000..bb14aeac6ed7a40d34f3a0239aca36c5e46cd633
--- /dev/null
+++ b/tests/minsfi/test_pointer_conversion.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2014 The Native Client Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * These are simple unit tests which exercise the conversion between trusted
+ * and untrusted pointers in MinSFI.
+ */
+
+/*
+ * Tell the minsfi_ptr.h header to generate code which returns a magic value
+ * if an error is detected, rather than abort.
+ */
+#define MINSFI_PTR_CONVERSION_TEST
+
+#include "native_client/src/include/minsfi_ptr.h"
+#include "native_client/src/include/nacl_assert.h"
+
+MinsfiSandbox sb;
jvoung (off chromium) 2014/09/10 17:04:30 Could be static too. I think we sometimes prefix g
dbrazdil 2014/09/10 18:49:48 Done.
+sfiptr_t untrusted_ptr;
+char *native_ptr;
+
+void test_from_ptr_masks_pointer(void) {
+ sb.mem_base = (char*) 0x00000000;
+ sb.ptr_mask = (sfiptr_t) 0x0000FFFF;
+
+ untrusted_ptr = (sfiptr_t) 0xABCDEF12;
+ native_ptr = (char*) 0x0000EF12;
+
+ ASSERT_EQ(native_ptr, FromMinsfiPtr(untrusted_ptr, &sb));
+}
+
+void test_from_ptr_adds_base(void) {
+ sb.mem_base = (char*) 0xABCD1000;
+ sb.ptr_mask = (sfiptr_t) 0xFFFFFFFF;
+
+ untrusted_ptr = (sfiptr_t) 0x00123456;
+ native_ptr = (char*) 0xABDF4456;
+
+ ASSERT_EQ(native_ptr, FromMinsfiPtr(untrusted_ptr, &sb));
+}
+
+void test_to_ptr_subtracts_base(void) {
+ sb.mem_base = (char*) 0x11111000;
+ sb.ptr_mask = (sfiptr_t) 0xFFFFFFFF;
+
+ native_ptr = (char*) 0x11234567;
+ untrusted_ptr = (sfiptr_t) 0x00123567;
+
+ ASSERT_EQ(untrusted_ptr, ToMinsfiPtr(native_ptr, &sb));
+}
+
+void test_to_ptr_checks_lower_bound(void) {
+ sb.mem_base = (char*) 0x11111000;
+ sb.ptr_mask = (sfiptr_t) 0xFFFFFFFF;
+
+ /* last rejected pointer */
+ native_ptr = (char*) 0x11110FFF;
+ untrusted_ptr = (sfiptr_t) 0xCAFEBABE; /* mock error code */
+
+ ASSERT_EQ(untrusted_ptr, ToMinsfiPtr(native_ptr, &sb));
+
+ /* first accepted pointer */
+ native_ptr = (char*) 0x11111000;
+ untrusted_ptr = (sfiptr_t) 0x00000000;
+
+ ASSERT_EQ(untrusted_ptr, ToMinsfiPtr(native_ptr, &sb));
+}
+
+void test_to_ptr_checks_upper_bound(void) {
+ sb.mem_base = (char*) 0x11110000;
+ sb.ptr_mask = (sfiptr_t) 0x0000FFFF;
+
+ /* last accepted pointer */
+ native_ptr = (char*) 0x1111FFFF;
+ untrusted_ptr = (sfiptr_t) 0x0000FFFF;
+
+ ASSERT_EQ(untrusted_ptr, ToMinsfiPtr(native_ptr, &sb));
+
+ /* first rejected pointer */
+ native_ptr = (char*) 0x11120000;
+ untrusted_ptr = (sfiptr_t) 0xCAFEBABE; /* mock error code */
+
+ ASSERT_EQ(untrusted_ptr, ToMinsfiPtr(native_ptr, &sb));
+}
+
+int main(void) {
+ test_from_ptr_masks_pointer();
+ test_from_ptr_adds_base();
+ test_to_ptr_subtracts_base();
+ test_to_ptr_checks_lower_bound();
+ test_to_ptr_checks_upper_bound();
+ return 0;
+}
« tests/minsfi/test_invoke_args.c ('K') | « tests/minsfi/test_invoke_args.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698