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

Unified Diff: src/include/minsfi_ptr.h

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
Index: src/include/minsfi_ptr.h
diff --git a/src/include/minsfi_ptr.h b/src/include/minsfi_ptr.h
new file mode 100644
index 0000000000000000000000000000000000000000..ae838442497e505c603fad9c286dd40c4fb37fd7
--- /dev/null
+++ b/src/include/minsfi_ptr.h
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ */
+
+#ifndef NATIVE_CLIENT_SRC_INCLUDE_MINSFI_PTR_H_
+#define NATIVE_CLIENT_SRC_INCLUDE_MINSFI_PTR_H_
+
+#include <assert.h>
+
+#include "native_client/src/include/minsfi_priv.h"
+
+/*
+ * This defines what ToMinsfiPtr should do if the given native pointer
+ * is not within the bounds of the allocated memory region. We abort in
+ * production code and return a magic constant when invoked inside tests.
+ */
+#ifndef MINSFI_PTR_CONVERSION_TEST
+#define ToMinsfiPtr_AbortAction abort();
+#else // MINSFI_PTR_CONVERSION_TEST
+#define ToMinsfiPtr_AbortAction return 0xCAFEBABE;
+#endif // MINSFI_PTR_CONVERSION_TEST
+
+/*
+ * Convert an untrusted pointer into a native pointer. Because this is just
+ * some integer provided by the untrusted code, we must sandbox it the same
+ * way the SandboxMemoryAccesses compiler pass does.
+ */
+static inline char *FromMinsfiPtr(sfiptr_t sfiptr, const MinsfiSandbox *sb) {
+ uint32_t masked_sfiptr = sfiptr & sb->ptr_mask;
+ return sb->mem_base + masked_sfiptr;
+}
+
+/*
+ * Convert a native pointer into an untrusted pointer. This means simply
+ * subtracting the memory base from the address.
+ */
+static inline sfiptr_t ToMinsfiPtr(char *ptr, const MinsfiSandbox *sb) {
jvoung (off chromium) 2014/09/10 17:04:29 you could probably make this a const char *ptr
dbrazdil 2014/09/10 18:49:47 Done.
+ uintptr_t ptr_int = (uintptr_t) ptr;
+ uintptr_t base_int = (uintptr_t) sb->mem_base;
+ sfiptr_t sb_ptr = ptr_int - base_int;
+
+ /* Check that the pointer is in the bounds of the allocated memory region. */
+ if ((base_int > ptr_int) || ((sb_ptr & (~sb->ptr_mask)) != 0)) {
+ ToMinsfiPtr_AbortAction
+ }
+
+ return sb_ptr;
+}
+
+#endif // NATIVE_CLIENT_SRC_INCLUDE_MINSFI_PTR_H_

Powered by Google App Engine
This is Rietveld 408576698