Index: src/trusted/validator_ragel/dfa_validate_common.c |
diff --git a/src/trusted/validator_ragel/dfa_validate_common.c b/src/trusted/validator_ragel/dfa_validate_common.c |
index 330a0ce2c44fc128ff1f7736740f2da3b9f0d80a..0bf579790e59a7ac90626eac9fb4782b15289775 100644 |
--- a/src/trusted/validator_ragel/dfa_validate_common.c |
+++ b/src/trusted/validator_ragel/dfa_validate_common.c |
@@ -33,16 +33,26 @@ Bool NaClDfaProcessValidationError(const uint8_t *begin, const uint8_t *end, |
return FALSE; |
} |
-Bool NaClDfaStubOutCPUUnsupportedInstruction(const uint8_t *begin, |
- const uint8_t *end, |
- uint32_t info, |
- void *callback_data) { |
+Bool NaClDfaForbidOrRewriteInstruction(const uint8_t *begin, |
+ const uint8_t *end, |
+ uint32_t info, |
+ void *callback_data) { |
+ struct ForbidRewriteCallbackData *data = callback_data; |
Petr Hosek
2015/07/20 23:58:57
Shouldn't you doing a cast here? Is this actually
ruiq
2015/07/21 00:39:44
This is valid in C, while not in C++. In C++, an e
Petr Hosek
2015/07/21 00:46:58
I'd still include an explicit cast, even if this p
ruiq
2015/07/21 02:52:24
I left this as it is: 1) It is not ambiguous; 2) i
|
/* Stub-out instructions unsupported on this CPU, but valid on other CPUs. */ |
if ((info & VALIDATION_ERRORS_MASK) == CPUID_UNSUPPORTED_INSTRUCTION) { |
- int *did_stubout = callback_data; |
- *did_stubout = 1; |
+ data->did_rewrite = 1; |
memset((uint8_t *)begin, NACL_HALT_OPCODE, end - begin); |
return TRUE; |
+ } else if ((info & VALIDATION_ERRORS_MASK) == FORBID_OR_REWRITE_INSTRUCTION) { |
+ if (data->pnacl_mode) |
+ return FALSE; |
+ else { |
+ /* TODO: rewrite instruction. For now, we keep the original instruction |
Petr Hosek
2015/07/20 23:58:57
Nit: Please include your LDAP in the TODO, i.e. "T
ruiq
2015/07/21 02:52:24
Done.
|
+ * and indicate validation success, which is consistent with current |
+ * validation results. */ |
+ data->did_rewrite = 1; |
+ return TRUE; |
+ } |
} else { |
return FALSE; |
} |