Chromium Code Reviews| Index: src/trusted/service_runtime/sel_validate_image.c |
| =================================================================== |
| --- src/trusted/service_runtime/sel_validate_image.c (revision 3931) |
| +++ 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; |
|
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
|
| + } |
| + 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 |