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

Unified Diff: src/trusted/service_runtime/sel_validate_image.c

Issue 3975001: Dynamic code modification support for x64 NaCl modules... (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: '' Created 10 years, 1 month 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
« no previous file with comments | « no previous file | src/trusted/validator_x86/nccopycode.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/trusted/service_runtime/sel_validate_image.c
===================================================================
--- src/trusted/service_runtime/sel_validate_image.c (revision 3669)
+++ src/trusted/service_runtime/sel_validate_image.c (working copy)
@@ -10,10 +10,11 @@
#if NACL_ARCH(NACL_BUILD_ARCH) == NACL_x86
+# include "native_client/src/trusted/validator_x86/nccopycode.h"
+
# if NACL_TARGET_SUBARCH == 32
# include "native_client/src/trusted/validator_x86/ncvalidate.h"
-# include "native_client/src/trusted/validator_x86/nccopycode.h"
int NaClValidateCode(struct NaClApp *nap, uintptr_t guest_addr,
uint8_t *data, size_t size) {
@@ -97,6 +98,7 @@
if (vstate == NULL) {
return LOAD_BAD_FILE;
}
+
NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
if (nap->validator_stub_out_mode) {
@@ -124,28 +126,41 @@
int NaClValidateCodeReplacement(struct NaClApp *nap, uintptr_t guest_addr,
uint8_t *data_old, uint8_t *data_new,
size_t size) {
- UNREFERENCED_PARAMETER(nap);
- UNREFERENCED_PARAMETER(guest_addr);
- UNREFERENCED_PARAMETER(data_old);
- UNREFERENCED_PARAMETER(data_new);
- UNREFERENCED_PARAMETER(size);
- NaClLog(1, "NaClValidateCodeReplacement: "
- "code replacement not yet supported on x86_64\n");
- return LOAD_UNIMPLEMENTED;
+ struct NaClValidatorState *vstate;
+ int is_ok;
+
+ vstate = NaClValidatorStateCreate(guest_addr, size, nap->bundle_size,
+ RegR15);
+ if (vstate == NULL) {
+ return LOAD_BAD_FILE;
+ }
+ NaClValidatorStateSetLogVerbosity(vstate, LOG_ERROR);
+
+ if (nap->validator_stub_out_mode) {
+ NaClLog(1, "NaClValidateCodeReplacement: "
+ "stub_out_mode not supported for code replacement\n");
+ return LOAD_BAD_FILE;
+ }
+ NaClValidateSegmentPair(data_old, data_new, guest_addr, size, vstate);
+ is_ok = NaClValidatesOk(vstate);
+ NaClValidatorStateDestroy(vstate);
+ if (!is_ok) {
+ return LOAD_VALIDATION_FAILED;
+ }
+ return LOAD_OK;
}
-
int NaClCopyCode(struct NaClApp *nap, uintptr_t guest_addr,
uint8_t *data_old, uint8_t *data_new,
size_t size) {
+ int result;
UNREFERENCED_PARAMETER(nap);
- UNREFERENCED_PARAMETER(guest_addr);
- UNREFERENCED_PARAMETER(data_old);
- UNREFERENCED_PARAMETER(data_new);
- UNREFERENCED_PARAMETER(size);
- NaClLog(1, "NaClCopyCode: "
- "code replacement not yet supported on x86_64\n");
- return LOAD_UNIMPLEMENTED;
+
+ result = NaClCopyCodeIter(data_old, data_new, guest_addr, size);
+ if (result != 0) {
+ return LOAD_UNLOADABLE;
+ }
+ return LOAD_OK;
}
# endif
« no previous file with comments | « no previous file | src/trusted/validator_x86/nccopycode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698