OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 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 #ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_SEG_SFI_NCVALIDATE_H__ | |
8 #define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_SEG_SFI_NCVALIDATE_H__ | |
9 | |
10 #include <stdio.h> | |
11 #include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h" | |
12 #include "native_client/src/trusted/validator/types_memory_model.h" | |
13 | |
14 /* | |
15 * ncvalidate.h: Validator for the segment-based sandbox. | |
16 * | |
17 * This is the primary library interface to the validator for the | |
18 * segment-based sandbox. This version should be used when performance | |
19 * is important. See ncvalidate_detailed.h for a secondary API which | |
20 * provides more details when reporting errors. | |
21 * | |
22 * Basic usage: | |
23 * if (!NaClArchSuppported()) fail | |
24 * vstate = NCValidateInit(base, size, features); | |
25 * if vstate == 0 fail | |
26 * for each section: | |
27 * NCValidateSegment(maddr, base, size, vstate); | |
28 * rc = NCValidateFinish(); | |
29 * if rc != 0 fail | |
30 * NCValidateFreeState(&vstate); | |
31 * | |
32 * See the README file in this directory for more info on the general | |
33 * structure of the validator. | |
34 */ | |
35 struct Gio; | |
36 struct NCDecoderInst; | |
37 struct NCValidatorState; | |
38 struct NaClErrorReporter; | |
39 | |
40 /* | |
41 * Set the maximum number of diagnostic errors to be reported to the | |
42 * given value (-1 implies all error messages). | |
43 */ | |
44 void NCValidateSetNumDiagnostics(struct NCValidatorState *vstate, | |
45 int num_diagnostics); | |
46 | |
47 /* | |
48 * NCValidateInit: Initialize NaCl validator internal state. | |
49 * Parameters: | |
50 * vbase: base virtual address for code segment | |
51 * codesize: size in bytes of code segment | |
52 * features: the features supported by the CPU that will run the code | |
53 * Returns: | |
54 * an initialized struct NCValidatorState * if everything is okay, | |
55 * else NULL | |
56 */ | |
57 struct NCValidatorState *NCValidateInit(const NaClPcAddress vbase, | |
58 const NaClMemorySize codesize, | |
59 const int readonly_text, | |
60 const NaClCPUFeaturesX86 *features); | |
61 | |
62 /* | |
63 * Allows "stub out mode" to be enabled, in which some unsafe | |
64 * instructions will be rendered safe by replacing them with HLT | |
65 * instructions. | |
66 */ | |
67 void NCValidateSetStubOutMode(struct NCValidatorState *vstate, | |
68 int do_stub_out); | |
69 | |
70 /* | |
71 * Set the maximum number of diagnostic errors to be reported to the | |
72 * given value (-1 implies all error messages). | |
73 */ | |
74 void NCValidateSetNumDiagnostics(struct NCValidatorState* vstate, | |
75 int num_diagnostics); | |
76 | |
77 /* Changes the error reporter to the given error reporter | |
78 * for the given validator state. | |
79 */ | |
80 void NCValidateSetErrorReporter(struct NCValidatorState* vstate, | |
81 struct NaClErrorReporter* error_reporter); | |
82 | |
83 /* Validate a segment */ | |
84 /* This routine will raise an segmentation exception if you ask | |
85 * it to check memory that can't be accessed. This should of be | |
86 * interpreted as an indication that the module in question is | |
87 * invalid. | |
88 */ | |
89 void NCValidateSegment(uint8_t *mbase, NaClPcAddress vbase, | |
90 NaClMemorySize sz, | |
91 struct NCValidatorState *vstate); | |
92 | |
93 /* Validate a segment for dynamic code replacement */ | |
94 /* This routine checks that the code found at mbase_old | |
95 * can be dynamically replaced with the code at mbase_new | |
96 * safely. Returns non-zero if successful. | |
97 */ | |
98 int NCValidateSegmentPair(uint8_t *mbase_old, uint8_t *mbase_new, | |
99 NaClPcAddress vbase, size_t sz, | |
100 const NaClCPUFeaturesX86 *features); | |
101 | |
102 /* Check targets and alignment. Returns non-zero if there are */ | |
103 /* safety issues, else returns 1 */ | |
104 /* BEWARE: vstate is invalid after this call */ | |
105 int NCValidateFinish(struct NCValidatorState *vstate); | |
106 | |
107 /* BEWARE: this call deallocates vstate. */ | |
108 void NCValidateFreeState(struct NCValidatorState **vstate); | |
109 | |
110 /* Print some interesting statistics... (optional). If used, | |
111 * should be called between NCValidateFinish and | |
112 * NCValidateFreeState. | |
113 * | |
114 * Note: Uses error reporter of validator to print messages. | |
115 * The default error reporter of the validator will not | |
116 * print any messages. To actually get the messages, you | |
117 * must associate an error reporter with the validator using | |
118 * NCValidateSetErrorReporter. | |
119 */ | |
120 void NCStatsPrint(struct NCValidatorState *vstate); | |
121 | |
122 /* Returns the default value used for controlling printing | |
123 * of validator messages. | |
124 * If zero, no messages are printed. | |
125 * If >0, only that many diagnostic errors are printed. | |
126 * If negative, all validator diagnostics are printed. | |
127 */ | |
128 int NCValidatorGetMaxDiagnostics(void); | |
129 | |
130 /* Changes default flag for printing validator error messages. | |
131 * If zero, no messages are printed. | |
132 * If >0, only that many diagnostic errors are printed. | |
133 * If negative, all validator diagnostics are printed. | |
134 */ | |
135 void NCValidatorSetMaxDiagnostics(int new_value); | |
136 | |
137 /* Returns 1 if any code has been overwritten with halts. */ | |
138 int NCValidatorDidStubOut(struct NCValidatorState *vstate); | |
139 | |
140 #endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_SEG_SFI_NCVALIDATE_H__
*/ | |
OLD | NEW |