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

Side by Side Diff: src/trusted/validator/x86/ncval_reg_sfi/nc_postconds.c

Issue 625923004: Delete old x86 validator. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: rebase master Created 6 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/nc_postconds.h"
8
9 #include "native_client/src/include/portability_io.h"
10 #include "native_client/src/shared/platform/nacl_log.h"
11 #include "native_client/src/trusted/validator/x86/decoder/ncop_exps.h"
12 #include "native_client/src/trusted/validator/x86/decoder/nc_inst_state.h"
13 #include "native_client/src/trusted/validator/x86/decoder/nc_inst_trans.h"
14 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter. h"
15 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter_ internal.h"
16 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_utils .h"
17 #include "native_client/src/trusted/validator/x86/ncval_reg_sfi/nc_memory_protec t.h"
18
19 /* To turn on debugging of instruction decoding, change value of
20 * DEBUGGING to 1.
21 */
22 #define DEBUGGING 0
23
24 #include "native_client/src/shared/utils/debugging.h"
25
26 #include "native_client/src/trusted/validator/x86/decoder/ncop_exps_inl.c"
27
28 /* Maximum character buffer size to use for generating messages. */
29 static const size_t kMaxBufferSize = 1024;
30
31 #ifdef NCVAL_TESTING
32 void NaClAddAssignsRegisterWithZeroExtendsPostconds(
33 struct NaClValidatorState* state) {
34 uint32_t i;
35 NaClExpVector* vector = state->cur_inst_vector;
36
37 DEBUG(NaClValidatorInstMessage(
38 LOG_INFO, state, state->cur_inst_state,
39 "-> Checking ZeroExtends postconditions...\n"));
40
41 /* Look for assignments to 32-bit registers for instructions that
42 * zero extend.
43 */
44 for (i = 0; i < vector->number_expr_nodes; ++i) {
45 NaClExp* node = &vector->node[i];
46 NaClOpKind node_reg;
47 if (ExprRegister != node->kind) continue;
48 if (!NaClHasBit(node->flags, NACL_EFLAG(ExprSet))) continue;
49 if (!NaClHasBit(node->flags, NACL_EFLAG(ExprSize32))) continue;
50 node_reg = NaClGetExpRegisterInline(node);
51 if (node_reg == RegUnknown) continue;
52 if (NaClAssignsRegisterWithZeroExtends32(state, 0, node_reg)) {
53 char* buffer;
54 size_t buffer_size;
55 char reg_name[kMaxBufferSize];
56 NaClOpRegName(node_reg, reg_name, kMaxBufferSize);
57 NaClConditionAppend(state->postcond, &buffer, &buffer_size);
58 SNPRINTF(buffer, buffer_size, "ZeroExtends(%s)", reg_name);
59 }
60 }
61 DEBUG(NaClValidatorMessage(
62 LOG_INFO, state, "<- Finished ZeroExtends postconditions...\n"));
63 }
64
65 void NaClAddLeaSafeAddressPostconds(
66 struct NaClValidatorState* state) {
67 uint32_t i;
68 NaClExpVector* vector = state->cur_inst_vector;
69 DEBUG(NaClValidatorInstMessage(
70 LOG_INFO, state, state->cur_inst_state,
71 "Checking SafeAddress postconditions...\n"));
72
73 /* Look for assignments to registers. */
74 for (i = 0; i < vector->number_expr_nodes; ++i) {
75 NaClOpKind reg;
76 NaClExp* node = &vector->node[i];
77 if (ExprRegister != node->kind) continue;
78 if (!NaClHasBit(node->flags, NACL_EFLAG(ExprSet))) continue;
79 if (!NaClHasBit(node->flags, NACL_EFLAG(ExprSize64))) continue;
80 reg = NaClGetExpRegisterInline(node);
81 if (RegUnknown == reg) continue;
82 if ((reg == RegRSP) || (reg == RegRBP)) {
83 /* Note: Do not need to check safe addresses computed
84 * by "LEA Rsp/Rbp ...". Currently, these two registers
85 * are already checked.. See NaClCheckRspAssignments and
86 * NaClCheckRbpAssignments in nc_protect_base.c for more
87 * information on how such LEA instructions are checked.
88 */
89 if (InstLea != NaClInstStateInst(state->cur_inst_state)->name) {
90 NaClAcceptLeaWithMoveLea32To64(state, reg);
91 }
92 } else if (NaClAcceptLeaSafeAddress(state)) {
93 char* buffer;
94 size_t buffer_size;
95 char reg_name[kMaxBufferSize];
96 NaClOpRegName(reg, reg_name, kMaxBufferSize);
97 NaClConditionAppend(state->postcond, &buffer, &buffer_size);
98 SNPRINTF(buffer, buffer_size, "SafeAddress(%s)", reg_name);
99 }
100 }
101 DEBUG(NaClValidatorMessage(
102 LOG_INFO, state, "Finished SafeAddress postconditions...\n"));
103 }
104
105 #endif
OLDNEW
« no previous file with comments | « src/trusted/validator/x86/ncval_reg_sfi/nc_postconds.h ('k') | src/trusted/validator/x86/ncval_reg_sfi/nc_protect_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698