Index: src/trusted/validator_ragel/validator_x86_64.rl |
=================================================================== |
--- src/trusted/validator_ragel/validator_x86_64.rl (revision 9857) |
+++ src/trusted/validator_ragel/validator_x86_64.rl (working copy) |
@@ -11,7 +11,7 @@ |
#include <stdlib.h> |
#include <string.h> |
-#include "native_client/src/trusted/validator_ragel/unreviewed/validator_internal.h" |
+#include "native_client/src/trusted/validator_ragel/validator_internal.h" |
%%{ |
machine x86_64_validator; |
@@ -124,7 +124,7 @@ |
else |
instruction_info_collected |= UNRESTRICTED_RBP_PROCESSED; |
restricted_register = NO_REG; |
- BitmapClearBit(valid_targets, (instruction_start - data)); |
+ MakeJumpTargetInvalid((instruction_start - data), valid_targets); |
}; |
# Special %rbp modifications without required sandboxing |
@@ -147,7 +147,7 @@ |
else |
instruction_info_collected |= UNRESTRICTED_RSP_PROCESSED; |
restricted_register = NO_REG; |
- BitmapClearBit(valid_targets, (instruction_start - data)); |
+ MakeJumpTargetInvalid((instruction_start - data), valid_targets); |
}; |
# naclcall or nacljmp. Note: first "and $~0x1f, %eXX" is a normal instruction |
@@ -167,8 +167,8 @@ |
RMFromModRM(instruction_start[5]) || |
RMFromModRM(instruction_start[1]) != RMFromModRM(*current_position)) |
instruction_info_collected |= UNRECOGNIZED_INSTRUCTION; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -186,8 +186,8 @@ |
RegFromModRM(instruction_start[5]) || |
RMFromModRM(instruction_start[1]) != RMFromModRM(*current_position)) |
instruction_info_collected |= UNRECOGNIZED_INSTRUCTION; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -214,8 +214,8 @@ |
RMFromModRM(instruction_start[6]) || |
RMFromModRM(instruction_start[2]) != RMFromModRM(*current_position)) |
instruction_info_collected |= UNRECOGNIZED_INSTRUCTION; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 4); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
+ MakeJumpTargetInvalid((instruction_start - data) + 4, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -242,8 +242,8 @@ |
RegFromModRM(instruction_start[6]) || |
RMFromModRM(instruction_start[2]) != RMFromModRM(*current_position)) |
instruction_info_collected |= UNRECOGNIZED_INSTRUCTION; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 4); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
+ MakeJumpTargetInvalid((instruction_start - data) + 4, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
restricted_register = NO_REG; |
}; |
@@ -295,8 +295,8 @@ |
string_instruction_rsi_no_rdi |
@{ |
Brad Chen
2012/09/29 00:06:00
Please comment every action.
# This action redefin
khim
2012/10/03 22:30:10
Done.
Functions make absolutely no sense here: we
|
instruction_start -= 6; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 2); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
+ MakeJumpTargetInvalid((instruction_start - data) + 2, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -305,8 +305,8 @@ |
string_instruction_rsi_no_rdi |
@{ |
instruction_start -= 7; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
restricted_register = NO_REG; |
}; |
@@ -316,8 +316,8 @@ |
(string_instruction_rdi_no_rsi | mmx_sse_rdi_instruction) |
@{ |
instruction_start -= 6; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 2); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
+ MakeJumpTargetInvalid((instruction_start - data) + 2, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -326,8 +326,8 @@ |
(string_instruction_rdi_no_rsi | mmx_sse_rdi_instruction) |
@{ |
instruction_start -= 7; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
restricted_register = NO_REG; |
}; |
@@ -341,10 +341,10 @@ |
string_instruction_rsi_rdi |
@{ |
instruction_start -= 12; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 2); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 8); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 12); |
+ MakeJumpTargetInvalid((instruction_start - data) + 2, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 8, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 12, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -355,10 +355,10 @@ |
string_instruction_rsi_rdi |
@{ |
instruction_start -= 13; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 2); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 6); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 9); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 13); |
+ MakeJumpTargetInvalid((instruction_start - data) + 2, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 6, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 9, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 13, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -369,10 +369,10 @@ |
string_instruction_rsi_rdi |
@{ |
instruction_start -= 13; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 9); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 13); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 9, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 13, valid_targets); |
restricted_register = NO_REG; |
} | |
@@ -383,10 +383,10 @@ |
string_instruction_rsi_rdi |
@{ |
instruction_start -= 14; |
- BitmapClearBit(valid_targets, (instruction_start - data) + 3); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 7); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 10); |
- BitmapClearBit(valid_targets, (instruction_start - data) + 14); |
+ MakeJumpTargetInvalid((instruction_start - data) + 3, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 7, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 10, valid_targets); |
+ MakeJumpTargetInvalid((instruction_start - data) + 14, valid_targets); |
restricted_register = NO_REG; |
}; |
@@ -425,7 +425,7 @@ |
main := ((call_alignment | normal_instruction | special_instruction) |
>{ |
- BitmapSetBit(valid_targets, current_position - data); |
+ MakeJumpTargetValid(current_position - data, valid_targets); |
} |
@{ |
if ((instruction_info_collected & |