OLD | NEW |
---|---|
(Empty) | |
1 /* | |
2 * Copyright (c) 2014 The Native Client Authors. All rights reserved. | |
3 * Use of this source code is governed by a BSD-style license that can be | |
4 * found in the LICENSE file. | |
5 */ | |
6 | |
7 #include "native_client/src/include/minsfi.h" | |
8 #include "native_client/src/include/minsfi_priv.h" | |
9 | |
10 /* | |
11 * Fixed offset of the data segment. This must be kept in sync with the | |
12 * AllocateDataSegment compiler pass. | |
13 */ | |
14 #define DATASEG_OFFSET 0x10000 | |
15 | |
16 /* Globals exported by the sandbox, aka the manifest. */ | |
17 extern uint32_t __sfi_pointer_size; | |
18 extern const char __sfi_data_segment[]; | |
19 extern uint32_t __sfi_data_segment_size; | |
20 | |
21 /* Entry point of the sandbox */ | |
22 extern int _start_minsfi(void); | |
23 | |
24 /* | |
25 * This is the global memory base variable used by the SFI sandboxing. It is | |
26 * a 64-bit unsigned integer on both 32-bit and 64-bit platforms. | |
27 */ | |
28 uint64_t __sfi_memory_base = 0; | |
jvoung (off chromium)
2014/09/05 00:31:59
Could add some emphasis that this is exported, but
dbrazdil
2014/09/05 19:41:37
Done.
| |
29 | |
30 static inline void get_manifest(manifest *sb) { | |
31 sb->ptr_size = __sfi_pointer_size; | |
32 sb->dataseg_offset = DATASEG_OFFSET; | |
33 sb->dataseg_size = __sfi_data_segment_size; | |
34 sb->dataseg_template = __sfi_data_segment; | |
35 } | |
36 | |
37 int minsfi_exec(void) { | |
38 if (__sfi_memory_base == 0) { | |
39 char *base; | |
40 manifest sb; | |
41 | |
42 get_manifest(&sb); | |
43 base = init_sandbox(&sb); | |
44 if (base == NULL) | |
45 return EXIT_FAILURE; | |
46 | |
47 __sfi_memory_base = (uint64_t) ((uintptr_t) base); | |
48 } | |
49 | |
50 return _start_minsfi(); | |
51 } | |
52 | |
53 bool minsfi_destroy(void) { | |
54 manifest sb; | |
55 | |
56 if (__sfi_memory_base == 0) | |
57 return true; | |
58 | |
59 get_manifest(&sb); | |
60 return destroy_sandbox((char*) ((uintptr_t) __sfi_memory_base), &sb); | |
jvoung (off chromium)
2014/09/05 00:31:59
Should this modify __sfi_memory_base back to 0 bef
dbrazdil
2014/09/05 19:41:37
Done. Added tests which check that the base has be
| |
61 } | |
OLD | NEW |