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

Side by Side Diff: src/trusted/service_runtime/sel_validate_image.c

Issue 5738003: Resurrect Petr's 64-bit dynamic code modification CL:... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2010 The Native Client Authors. All rights reserved. 2 * Copyright 2010 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can 3 * Use of this source code is governed by a BSD-style license that can
4 * be found in the LICENSE file. 4 * be found in the LICENSE file.
5 */ 5 */
6 6
7 #include "native_client/src/shared/platform/nacl_log.h" 7 #include "native_client/src/shared/platform/nacl_log.h"
8 #include "native_client/src/trusted/service_runtime/sel_ldr.h" 8 #include "native_client/src/trusted/service_runtime/sel_ldr.h"
9 9
10 10
11 #if NACL_ARCH(NACL_BUILD_ARCH) == NACL_x86 11 #if NACL_ARCH(NACL_BUILD_ARCH) == NACL_x86
12 12
13 # include "native_client/src/trusted/validator_x86/nccopycode.h"
14
13 # if NACL_TARGET_SUBARCH == 32 15 # if NACL_TARGET_SUBARCH == 32
14 16
15 # include "native_client/src/trusted/validator_x86/ncvalidate.h" 17 # include "native_client/src/trusted/validator_x86/ncvalidate.h"
16 # include "native_client/src/trusted/validator_x86/nccopycode.h"
17 18
18 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr, 19 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr,
19 uint8_t *data, size_t size) { 20 uint8_t *data, size_t size) {
20 struct NCValidatorState *vstate; 21 struct NCValidatorState *vstate;
21 int validator_result; 22 int validator_result;
22 23
23 if (nap->validator_stub_out_mode) { 24 if (nap->validator_stub_out_mode) {
24 /* In stub out mode, we do two passes. The second pass acts as a 25 /* In stub out mode, we do two passes. The second pass acts as a
25 sanity check that bad instructions were indeed overwritten with 26 sanity check that bad instructions were indeed overwritten with
26 allowable HLTs. */ 27 allowable HLTs. */
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr, 91 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr,
91 uint8_t *data, size_t size) { 92 uint8_t *data, size_t size) {
92 struct NaClValidatorState *vstate; 93 struct NaClValidatorState *vstate;
93 int is_ok; 94 int is_ok;
94 95
95 vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size, 96 vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size,
96 RegR15); 97 RegR15);
97 if (vstate == NULL) { 98 if (vstate == NULL) {
98 return LOAD_BAD_FILE; 99 return LOAD_BAD_FILE;
99 } 100 }
101
100 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR); 102 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
101 103
102 if (nap->validator_stub_out_mode) { 104 if (nap->validator_stub_out_mode) {
103 /* In stub out mode, we do two passes. The second pass acts as a sanity 105 /* In stub out mode, we do two passes. The second pass acts as a sanity
104 * check, after illegal instructions have been stubbed out with allowable 106 * check, after illegal instructions have been stubbed out with allowable
105 * HLTs. 107 * HLTs.
106 * Start pass one to find errors, and stub out illegal instructions. 108 * Start pass one to find errors, and stub out illegal instructions.
107 */ 109 */
108 NaClValidatorStateSetDoStubOut(vstate, TRUE); 110 NaClValidatorStateSetDoStubOut(vstate, TRUE);
109 NaClValidateSegment(data, guest_addr, size, vstate); 111 NaClValidateSegment(data, guest_addr, size, vstate);
110 NaClValidatorStateDestroy(vstate); 112 NaClValidatorStateDestroy(vstate);
111 vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size, 113 vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size,
112 RegR15); 114 RegR15);
113 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR); 115 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
114 } 116 }
115 NaClValidateSegment(data, guest_addr, size, vstate); 117 NaClValidateSegment(data, guest_addr, size, vstate);
116 is_ok = NaClValidatesOk(vstate); 118 is_ok = NaClValidatesOk(vstate);
117 NaClValidatorStateDestroy(vstate); 119 NaClValidatorStateDestroy(vstate);
118 if (!is_ok) { 120 if (!is_ok) {
119 return LOAD_VALIDATION_FAILED; 121 return LOAD_VALIDATION_FAILED;
120 } 122 }
121 return LOAD_OK; 123 return LOAD_OK;
122 } 124 }
123 125
124 int NaClValidateCodeReplacement(struct NaClApp *nap, uintptr_t guest_addr, 126 int NaClValidateCodeReplacement(struct NaClApp *nap, uintptr_t guest_addr,
125 uint8_t *data_old, uint8_t *data_new, 127 uint8_t *data_old, uint8_t *data_new,
126 size_t size) { 128 size_t size) {
127 UNREFERENCED_PARAMETER(nap); 129 struct NaClValidatorState *vstate;
128 UNREFERENCED_PARAMETER(guest_addr); 130 int is_ok;
129 UNREFERENCED_PARAMETER(data_old); 131
130 UNREFERENCED_PARAMETER(data_new); 132 vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size,
131 UNREFERENCED_PARAMETER(size); 133 RegR15);
132 NaClLog(1, "NaClValidateCodeReplacement: " 134 if (vstate == NULL) {
133 "code replacement not yet supported on x86_64\n"); 135 return LOAD_BAD_FILE;
134 return LOAD_UNIMPLEMENTED; 136 }
137 NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
138
139 if (nap->validator_stub_out_mode) {
140 NaClLog(1, "NaClValidateCodeReplacement: "
141 "stub_out_mode not supported for code replacement\n");
142 return LOAD_BAD_FILE;
elijahtaylor (use chromium) 2010/12/10 20:01:40 does 'vstate' need to be cleaned up here? or move
Karl 2010/12/10 21:18:15 yes you need to do one of the above. Otherwise mem
143 }
144 NaClValidateSegmentPair(data_old, data_new, guest_addr, size, vstate);
145 is_ok = NaClValidatesOk(vstate);
146 NaClValidatorStateDestroy(vstate);
147 if (!is_ok) {
148 return LOAD_VALIDATION_FAILED;
149 }
150 return LOAD_OK;
135 } 151 }
136 152
137
138 int NaClCopyCode(struct NaClApp *nap, uintptr_t guest_addr, 153 int NaClCopyCode(struct NaClApp *nap, uintptr_t guest_addr,
139 uint8_t *data_old, uint8_t *data_new, 154 uint8_t *data_old, uint8_t *data_new,
140 size_t size) { 155 size_t size) {
156 int result;
141 UNREFERENCED_PARAMETER(nap); 157 UNREFERENCED_PARAMETER(nap);
142 UNREFERENCED_PARAMETER(guest_addr); 158
143 UNREFERENCED_PARAMETER(data_old); 159 result = NaClCopyCodeIter(data_old, data_new, guest_addr, size);
144 UNREFERENCED_PARAMETER(data_new); 160 if (result != 0) {
145 UNREFERENCED_PARAMETER(size); 161 return LOAD_UNLOADABLE;
146 NaClLog(1, "NaClCopyCode: " 162 }
147 "code replacement not yet supported on x86_64\n"); 163 return LOAD_OK;
148 return LOAD_UNIMPLEMENTED;
149 } 164 }
150 165
151 # endif 166 # endif
152 167
153 #elif NACL_ARCH(NACL_BUILD_ARCH) == NACL_arm 168 #elif NACL_ARCH(NACL_BUILD_ARCH) == NACL_arm
154 169
155 # include "native_client/src/trusted/validator_arm/ncvalidate.h" 170 # include "native_client/src/trusted/validator_arm/ncvalidate.h"
156 171
157 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr, 172 int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr,
158 uint8_t *data, size_t size) { 173 uint8_t *data, size_t size) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 NaClLog(LOG_ERROR, "VALIDATION FAILED.\n"); 232 NaClLog(LOG_ERROR, "VALIDATION FAILED.\n");
218 NaClLog(LOG_ERROR, 233 NaClLog(LOG_ERROR,
219 "Run sel_ldr in debug mode to ignore validation failure.\n"); 234 "Run sel_ldr in debug mode to ignore validation failure.\n");
220 NaClLog(LOG_ERROR, 235 NaClLog(LOG_ERROR,
221 "Run ncval <module-name> for validation error details.\n"); 236 "Run ncval <module-name> for validation error details.\n");
222 rcode = LOAD_VALIDATION_FAILED; 237 rcode = LOAD_VALIDATION_FAILED;
223 } 238 }
224 } 239 }
225 return rcode; 240 return rcode;
226 } 241 }
OLDNEW
« no previous file with comments | « no previous file | src/trusted/validator_x86/nccopycode.h » ('j') | src/trusted/validator_x86/nccopycode.c » ('J')

Powered by Google App Engine
This is Rietveld 408576698