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

Unified Diff: src/trusted/validator_ragel/dfa_validate_32.c

Issue 1269113003: Rewrite non-temporal instructions Base URL: https://chromium.googlesource.com/native_client/src/native_client.git@master
Patch Set: Use #if SUBARCH Created 5 years, 4 months 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
Index: src/trusted/validator_ragel/dfa_validate_32.c
diff --git a/src/trusted/validator_ragel/dfa_validate_32.c b/src/trusted/validator_ragel/dfa_validate_32.c
index bdbe510a5745417d872ceb43a56ff5b50317dd13..5f3003a4d3259c1542ccbca8ba0345146aa6fc24 100644
--- a/src/trusted/validator_ragel/dfa_validate_32.c
+++ b/src/trusted/validator_ragel/dfa_validate_32.c
@@ -40,8 +40,14 @@ NaClValidationStatus ApplyDfaValidator_x86_32(
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,9 +82,21 @@ NaClValidationStatus ApplyDfaValidator_x86_32(
} else {
if (ValidateChunkIA32(data, size, 0 /*options*/, cpu_features,
NaClDfaStubOutUnsupportedInstruction,
- &callback_data))
- status = NaClValidationSucceeded;
+ &callback_data)) {
+ /* If code is rewritten, revalidate. */
+ if (callback_data.did_rewrite == 1) {
+ reval_result = ValidateChunkIA32(data, size, 0 /*options*/,
+ cpu_features,
+ NaClDfaStubOutUnsupportedInstruction,
+ &reval_callback_data);
+ if (reval_result && reval_callback_data.did_rewrite == 0)
+ status = NaClValidationSucceeded;
+ } else {
+ status = NaClValidationSucceeded;
+ }
+ }
}
+
if (status != NaClValidationSucceeded && errno == ENOMEM)
status = NaClValidationFailedOutOfMemory;

Powered by Google App Engine
This is Rietveld 408576698