| Index: src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h
|
| diff --git a/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h b/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h
|
| deleted file mode 100644
|
| index 65fc663073d110364d69aef063dfe7a8f2430ed3..0000000000000000000000000000000000000000
|
| --- a/src/trusted/validator/x86/ncval_reg_sfi/ncvalidate_iter.h
|
| +++ /dev/null
|
| @@ -1,407 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2012 The Native Client Authors. All rights reserved.
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#ifndef NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_REG_SFI_NCVALIDATE_ITER_H__
|
| -#define NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_REG_SFI_NCVALIDATE_ITER_H__
|
| -
|
| -/*
|
| - * ncvalidate_iter.h: Validator for the register-based SFI sandbox.
|
| - *
|
| - * This is the primary library interface to the x86-64 validator for the
|
| - * register-based sandbox. This version should be used when performance
|
| - * is important. See ncvalidate_iter_detailed.h for a secondary API which
|
| - * provides more details when reporting errors.
|
| - *
|
| - * Basic usage:
|
| - * -- base is initial address of ELF file.
|
| - * -- limit is the size of the ELF file.
|
| - * -- maddr is the address to the memory of a section.
|
| - * -- vaddr is the starting virtual address associated with a section.
|
| - * -- size is the number of bytes in a section.
|
| - *
|
| - * if (!NaClArchSupported()) fail;
|
| - * NaClValidatorState* state =
|
| - * NaClValidatorStateCreate(base, limit - base, 32, readonly, RegR15);
|
| - * if (state == NULL) fail;
|
| - * for each section:
|
| - * NaClValidateSegment(maddr, vaddr, size, state);
|
| - * if (!NaClValidatesOk(state)) fail;
|
| - * NaClValidatorStateDestroy(state);
|
| - */
|
| -
|
| -#include "native_client/src/include/portability.h"
|
| -#include "native_client/src/shared/utils/types.h"
|
| -#include "native_client/src/trusted/validator/ncvalidate.h"
|
| -#include "native_client/src/trusted/validator/types_memory_model.h"
|
| -#include "native_client/src/trusted/validator/x86/decoder/gen/ncopcode_operand_kind.h"
|
| -#include "native_client/src/trusted/validator/x86/error_reporter.h"
|
| -#include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h"
|
| -
|
| -EXTERN_C_BEGIN
|
| -
|
| -struct NaClDecodeTables;
|
| -struct NaClInstIter;
|
| -struct NaClInstState;
|
| -struct NaClValidatorState;
|
| -
|
| -/* Control flag that when set to FALSE, turns of the printing of validator
|
| - * messages.
|
| - */
|
| -extern Bool NACL_FLAGS_print_validator_messages;
|
| -
|
| -/* When >= 0, only print this many errors before quiting. When
|
| - * < 0, print all errors.
|
| - */
|
| -extern int NACL_FLAGS_max_reported_errors;
|
| -
|
| -/* Command line flag controlling whether each instruction is traced
|
| - * while validating instructions.
|
| - */
|
| -extern Bool NACL_FLAGS_validator_trace_instructions;
|
| -
|
| -/* Command line flag controlling whether the internal representation
|
| - * of each instruction is trace while validating.
|
| - * Command line flag controlling whether each instruction, and its
|
| - * corresponding internal details, is traced while validating
|
| - * instructions.
|
| - */
|
| -extern Bool NACL_FLAGS_validator_trace_inst_interals;
|
| -
|
| -/* Command line flag controlling whether address error messages
|
| - * should be printed out using the format needed by ncval_annotate.py
|
| - */
|
| -extern Bool NACL_FLAGS_ncval_annotate;
|
| -
|
| -/* UNSAFE interal flags used by enuminst test to support
|
| - * partial validation.
|
| - */
|
| -extern Bool NACL_FLAGS_unsafe_single_inst_mode;
|
| -
|
| -#ifdef NCVAL_TESTING
|
| -/* Command line flag for printing out prefix/postfix conditions. */
|
| -extern Bool NACL_FLAGS_print_validator_conditions;
|
| -
|
| -/* Command line flag controlling whether pre/post conditions are printed
|
| - * on all instructions. By default, only those instructions that validate
|
| - * have pre/post conditions printed.
|
| - */
|
| -extern Bool NACL_FLAGS_report_conditions_on_all;
|
| -#endif
|
| -
|
| -/* Changes all validator trace flags to true. */
|
| -void NaClValidatorFlagsSetTraceVerbose(void);
|
| -
|
| -/* The model of a validator state. */
|
| -typedef struct NaClValidatorState NaClValidatorState;
|
| -
|
| -/* Create a validator state to validate the code segment.
|
| - * Note: Messages (if any) produced by the validator are sent to the stream
|
| - * defined by native_client/src/shared/platform/nacl_log.h.
|
| - * Parameters.
|
| - * vbase - The virtual address for the contents of the code segment.
|
| - * sz - The number of bytes in the code segment.
|
| - * base_register - OperandKind defining value for base register (or
|
| - * RegUnknown if not defined).
|
| - * readonly - Whether the text should be treated as read-only.
|
| - * features - The CPU features to use. Uses local features of machine if NULL.
|
| - * Returns:
|
| - * A pointer to an initialized validator state if everything is ok, NULL
|
| - * otherwise.
|
| - */
|
| -NaClValidatorState* NaClValidatorStateCreate(
|
| - const NaClPcAddress vbase,
|
| - const NaClMemorySize codesize,
|
| - const NaClOpKind base_register,
|
| - const int readonly, /* Bool */
|
| - const NaClCPUFeaturesX86 *features);
|
| -
|
| -/* Returns true if the instruction iterator of the validator has any more
|
| - * instructions. Also does any necessary internal caching if there are
|
| - * more instructions, based on the instruction iterator.
|
| - */
|
| -Bool NaClValidatorStateIterHasNext(NaClValidatorState *vstate);
|
| -
|
| -/* Advances the instruction iterator of the validator to the next instruction.
|
| - * Also does necessary internal caching expected by the validator for the
|
| - * next instruction.
|
| - */
|
| -void NaClValidatorStateIterAdvance(NaClValidatorState *vstate);
|
| -
|
| -/* Assumes that we have finished iterating through the instruction iterator
|
| - * of the validator and cleans up appropriate cached information that is
|
| - * only defined while iterating over instructions.
|
| - */
|
| -void NaClValidatorStateIterFinish(NaClValidatorState *vstate);
|
| -
|
| -/* Resets the instruction iterator back to the beginning of the segment.
|
| - * Returns true on success.
|
| - */
|
| -Bool NaClValidatorStateIterReset(NaClValidatorState *vstate);
|
| -
|
| -/* Returns the current maximum number of errors that can be reported.
|
| - * Note: When > 0, the validator will only print that many errors before
|
| - * quiting. When 0, the validator will not print any messages. When < 0,
|
| - * the validator will print all found errors.
|
| - * Note: Defaults to NACL_FLAGS_max_reported_errors.
|
| - */
|
| -int NaClValidatorStateGetMaxReportedErrors(NaClValidatorState* state);
|
| -
|
| -/* Changes the current maximum number of errors that will be reported before
|
| - * quiting. For legal parameter values, see
|
| - * NaClValidatorStateGetMaxReportedErrors.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - * Note: This function will have no effect unless
|
| - * NaClValidatorStateSetErrorReporter is called to define error reporting.
|
| - */
|
| -void NaClValidatorStateSetMaxReportedErrors(NaClValidatorState* state,
|
| - int max_reported_errors);
|
| -
|
| -/* Changes the report error reported for the validator. By default, no
|
| - * error messages are printed. To print error messages, use an appropriate
|
| - * error printer, such as kNaClVerboseErrorReporter in ncval_driver.h.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment. If not set, the validator will not print
|
| - * error messages.
|
| - * Note: Even if the error reporter is set to kNaClVerboseErrorReporter,
|
| - * errors will not be reported unless you also change the maximum number
|
| - * of errors reported via a call to NaClValidatorStateSetMaxReportedErrors.
|
| - * The reason for this is that the default number of reported errors is zero
|
| - * (based on the default use of the validator in sel_ldr).
|
| - */
|
| -void NaClValidatorStateSetErrorReporter(NaClValidatorState* state,
|
| - struct NaClErrorReporter* reporter);
|
| -
|
| -/* A default, null error reporter for a NCInstState* */
|
| -extern NaClErrorReporter kNaClNullErrorReporter;
|
| -
|
| -/* Verbose error reporter for a NaClInstState* that reports to
|
| - * NaClLogGetGio().
|
| - */
|
| -extern NaClErrorReporter kNaClVerboseErrorReporter;
|
| -
|
| -/* Returns true if each instruction should be printed as the validator
|
| - * processes the instruction.
|
| - * Note: Defaults to NACL_FLAGS_validator_trace.
|
| - */
|
| -Bool NaClValidatorStateGetTraceInstructions(NaClValidatorState* state);
|
| -
|
| -/* Changes the value on whether each instruction should be printed as
|
| - * the validator processes the instruction.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - */
|
| -void NaClValidatorStateSetTraceInstructions(NaClValidatorState* state,
|
| - Bool new_value);
|
| -
|
| -/* Returns true if the internal representation of each instruction
|
| - * should be printed as the validator processes the instruction.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - */
|
| -Bool NaClValidatorStateGetTraceInstInternals(NaClValidatorState* state);
|
| -
|
| -/* Changes the value on whether the internal details of each validated
|
| - * instruction should be printed, as the validator visits the instruction.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - */
|
| -void NaClValidatorStateSetTraceInstInternals(NaClValidatorState* state,
|
| - Bool new_value);
|
| -
|
| -/* Returns true if any of thevalidator trace flags are set.
|
| - * Note: If this function returns true, so does
|
| - * NaClValidatorStateGetTraceInstructions
|
| - * NaClValidatorStateGetTraceInstInternals
|
| - */
|
| -Bool NaClValidatorStateTrace(NaClValidatorState* state);
|
| -
|
| -/* Convenience function that changes all validator trace flags to true.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - */
|
| -void NaClValidatorStateSetTraceVerbose(NaClValidatorState* state);
|
| -
|
| -/* Returns the log verbosity for printed validator messages. Legal
|
| - * values are defined by src/shared/platform/nacl_log.h.
|
| - * Note: Defaults to LOG_INFO.
|
| - */
|
| -int NaClValidatorStateGetLogVerbosity(NaClValidatorState* state);
|
| -
|
| -/* Changes the log verbosity for printed validator messages to the
|
| - * new value. Legal values are defined by src/shared/platform/nacl_log.h.
|
| - * Note: Should only be called between calls to NaClValidatorStateCreate
|
| - * and NaClValidateSegment.
|
| - * Note: NaClLogGetVerbosity() can override this value if more severe
|
| - * than the value defined here. This allows a global limit (defined
|
| - * by nacl_log.h) as well as a validator specific limit.
|
| - */
|
| -void NaClValidatorStateSetLogVerbosity(NaClValidatorState* state,
|
| - Bool new_value);
|
| -
|
| -/* Return the value of the "do stub out" flag, i.e. whether instructions will
|
| - * be stubbed out with HLT if they are found to be illegal.
|
| - */
|
| -Bool NaClValidatorStateGetDoStubOut(NaClValidatorState* state);
|
| -
|
| -/* Changes the "do stub out" flag to the given value. Note: Should only
|
| - * be called between calls to NaClValidatorStateCreate and NaClValidateSegment.
|
| - */
|
| -void NaClValidatorStateSetDoStubOut(NaClValidatorState* state,
|
| - Bool new_value);
|
| -
|
| -/* Stub out "num" bytes starting at "ptr". */
|
| -void NCStubOutMem(NaClValidatorState *state, void *ptr, size_t num);
|
| -
|
| -/* Validate a code segment.
|
| - * Parameters:
|
| - * mbase - The address of the beginning of the code segment.
|
| - * vbase - The virtual address associated with the beginning of the code
|
| - * segment.
|
| - * sz - The number of bytes in the code segment.
|
| - * state - The validator state to use while validating.
|
| - */
|
| -void NaClValidateSegment(uint8_t* mbase,
|
| - NaClPcAddress vbase,
|
| - NaClMemorySize sz,
|
| - NaClValidatorState* state);
|
| -
|
| -/* Same as NaClValidateSegment, except that the given decoder table is used
|
| - * instead.
|
| - */
|
| -void NaClValidateSegmentUsingTables(uint8_t* mbase,
|
| - NaClPcAddress vbase,
|
| - NaClMemorySize sz,
|
| - NaClValidatorState* state,
|
| - const struct NaClDecodeTables* tables);
|
| -
|
| -/*
|
| - * Validate a segment for dynamic code replacement
|
| - * Checks if code at mbase_old can be replaced with code at mbase_new
|
| - * Note that mbase_old was validated when it was inserted originally.
|
| - * If validation fails, state->validates_ok will be set to false.
|
| - * Parameters:
|
| - * mbase_old - The address of the beginning of the code segment to be
|
| - * replaced
|
| - * mbase_new - The address of the code segment that replaces the old
|
| - * segment
|
| - * vbase - Virtual address that is associated with both segments
|
| - * size - Length of the code segments (the segments must be of the same
|
| - * size)
|
| - * state - The validator state to use while validating *new* segment
|
| - */
|
| -void NaClValidateSegmentPair(uint8_t *mbase_old,
|
| - uint8_t *mbase_new,
|
| - NaClPcAddress vbase,
|
| - size_t size,
|
| - struct NaClValidatorState *state);
|
| -
|
| -/* Returns true if the validator hasn't found any problems with the validated
|
| - * code segments.
|
| - * Parameters:
|
| - * state - The validator state used to validate code segments.
|
| - * Returns:
|
| - * true only if no problems have been found.
|
| - */
|
| -Bool NaClValidatesOk(NaClValidatorState* state);
|
| -
|
| -/* Cleans up and returns the memory created by the corresponding
|
| - * call to NaClValidatorStateCreate.
|
| - */
|
| -void NaClValidatorStateDestroy(NaClValidatorState* state);
|
| -
|
| -/* Prints out a validator message for the given level.
|
| - * Parameters:
|
| - * level - The level of the message, as defined in nacl_log.h
|
| - * state - The validator state that detected the error.
|
| - * format - The format string of the message to print.
|
| - * ... - arguments to the format string.
|
| - */
|
| -void NaClValidatorMessage(int level,
|
| - NaClValidatorState* state,
|
| - const char* format,
|
| - ...) ATTRIBUTE_FORMAT_PRINTF(3, 4);
|
| -
|
| -/* Prints out a validator message for the given level using
|
| - * a variable argument list.
|
| - * Parameters:
|
| - * level - The level of the message, as defined in nacl_log.h
|
| - * state - The validator state that detected the error.
|
| - * format - The format string of the message to print.
|
| - * ap - variable argument list for the format.
|
| - */
|
| -void NaClValidatorVarargMessage(int level,
|
| - NaClValidatorState* state,
|
| - const char* format,
|
| - va_list ap);
|
| -
|
| -/* Prints out a validator message for the given address.
|
| - * Parameters:
|
| - * level - The level of the message, as defined in nacl_log.h
|
| - * state - The validator state that detected the error.
|
| - * addr - The address where the error occurred.
|
| - * format - The format string of the message to print.
|
| - * ... - arguments to the format string.
|
| - */
|
| -void NaClValidatorPcAddressMessage(int level,
|
| - NaClValidatorState* state,
|
| - NaClPcAddress addr,
|
| - const char* format,
|
| - ...) ATTRIBUTE_FORMAT_PRINTF(4, 5);
|
| -
|
| -/* Prints out a validator message for the given instruction.
|
| - * Parameters:
|
| - * level - The level of the message, as defined in nacl_log.h
|
| - * state - The validator state that detected the error.
|
| - * inst - The instruction that caused the vaidator error.
|
| - * format - The format string of the message to print.
|
| - * ... - arguments to the format string.
|
| - */
|
| -void NaClValidatorInstMessage(int level,
|
| - NaClValidatorState* state,
|
| - struct NaClInstState* inst,
|
| - const char* format,
|
| - ...) ATTRIBUTE_FORMAT_PRINTF(4, 5);
|
| -
|
| -/* Prints out a validator message and two given instructions.
|
| - * Parameters:
|
| - * level - The level of the message, as defined in nacl_log.h
|
| - * state - The validator state that detected the error.
|
| - * inst1 - The first instruction to be printed.
|
| - * inst2 - The second instruction to be printed.
|
| - * format - The format string of the message to print.
|
| - * ... - arguments to the format string.
|
| - */
|
| -void NaClValidatorTwoInstMessage(int level,
|
| - NaClValidatorState* state,
|
| - struct NaClInstState* inst1,
|
| - struct NaClInstState* inst2,
|
| - const char* format,
|
| - ...) ATTRIBUTE_FORMAT_PRINTF(5, 6);
|
| -
|
| -/* Returns true if the validator should quit due to previous errors. */
|
| -Bool NaClValidatorQuit(NaClValidatorState* state);
|
| -
|
| -/* Returns true if any code has been overwritten with halts. */
|
| -Bool NaClValidatorDidStubOut(NaClValidatorState *vstate);
|
| -
|
| -#ifdef NCVAL_TESTING
|
| -/* Defines the buffer and the corresponding buffer size to use for SNPRINTF,
|
| - * given the current contents of the pre/post condition.
|
| - */
|
| -void NaClConditionAppend(char* condition,
|
| - char** buffer,
|
| - size_t* buffer_size);
|
| -
|
| -/* Prints out the address of the current instruction, and the pre/post
|
| - * conditions associated with the current instruction.
|
| - */
|
| -void NaClPrintConditions(NaClValidatorState *state);
|
| -#endif
|
| -
|
| -EXTERN_C_END
|
| -
|
| -#endif /* NATIVE_CLIENT_SRC_TRUSTED_VALIDATOR_X86_NCVAL_REG_SFI_NCVALIDATE_ITER_H__ */
|
|
|