Chromium Code Reviews| Index: src/trusted/validator_ragel/dfa_validate_64.c |
| diff --git a/src/trusted/validator_ragel/dfa_validate_64.c b/src/trusted/validator_ragel/dfa_validate_64.c |
| index f91d36fe95be581edacec83c3c3a303e2dec2f6e..87013d67591cffa176fa03ff789e45e1cf1029d2 100644 |
| --- a/src/trusted/validator_ragel/dfa_validate_64.c |
| +++ b/src/trusted/validator_ragel/dfa_validate_64.c |
| @@ -40,8 +40,14 @@ static NaClValidationStatus ApplyDfaValidator_x86_64( |
| enum NaClValidationStatus status = NaClValidationFailed; |
| void *query = NULL; |
| struct StubOutCallbackData callback_data; |
| + /* For revalidation */ |
| + struct StubOutCallbackData reval_callback_data; |
| + Bool reval_result = FALSE; |
| + |
| callback_data.flags = flags; |
| callback_data.did_rewrite = 0; |
| + reval_callback_data.flags = flags; |
| + reval_callback_data.did_rewrite = 0; |
| UNREFERENCED_PARAMETER(guest_addr); |
| if (stubout_mode) |
| @@ -76,8 +82,18 @@ static NaClValidationStatus ApplyDfaValidator_x86_64( |
| } else { |
| if (ValidateChunkAMD64(data, size, 0 /*options*/, cpu_features, |
| NaClDfaStubOutUnsupportedInstruction, |
| - &callback_data)) |
| + &callback_data)) { |
| + /* If code is rewritten, revalidate. */ |
| + if (callback_data.did_rewrite == 1) { |
| + reval_result = ValidateChunkAMD64(data, size, 0 /*options*/, |
| + cpu_features, |
| + NaClDfaStubOutUnsupportedInstruction, |
| + &reval_callback_data); |
| + CHECK(reval_result); |
| + CHECK(reval_callback_data.did_rewrite == 0); |
|
bradn
2015/08/04 22:03:30
This should return Failure instead of being a chec
ruiq
2015/08/05 20:11:02
Done.
|
| + } |
| status = NaClValidationSucceeded; |
| + } |
| } |
| if (status != NaClValidationSucceeded && errno == ENOMEM) |