| Index: sandbox/win/src/policy_engine_processor.h
|
| diff --git a/sandbox/win/src/policy_engine_processor.h b/sandbox/win/src/policy_engine_processor.h
|
| deleted file mode 100644
|
| index 0d5689604248e1ed32803cdd1c68ac31e27a29ec..0000000000000000000000000000000000000000
|
| --- a/sandbox/win/src/policy_engine_processor.h
|
| +++ /dev/null
|
| @@ -1,148 +0,0 @@
|
| -// Copyright (c) 2010 The Chromium 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 SANDBOX_SRC_POLICY_ENGINE_PROCESSOR_H__
|
| -#define SANDBOX_SRC_POLICY_ENGINE_PROCESSOR_H__
|
| -
|
| -#include <stddef.h>
|
| -#include <stdint.h>
|
| -
|
| -#include "base/macros.h"
|
| -#include "sandbox/win/src/policy_engine_opcodes.h"
|
| -#include "sandbox/win/src/policy_engine_params.h"
|
| -
|
| -namespace sandbox {
|
| -
|
| -// This header contains the core policy evaluator. In its simplest form
|
| -// it evaluates a stream of opcodes assuming that they are laid out in
|
| -// memory as opcode groups.
|
| -//
|
| -// An opcode group has N comparison opcodes plus 1 action opcode. For
|
| -// example here we have 3 opcode groups (A, B,C):
|
| -//
|
| -// [comparison 1] <-- group A start
|
| -// [comparison 2]
|
| -// [comparison 3]
|
| -// [action A ]
|
| -// [comparison 1] <-- group B start
|
| -// [action B ]
|
| -// [comparison 1] <-- group C start
|
| -// [comparison 2]
|
| -// [action C ]
|
| -//
|
| -// The opcode evaluator proceeds from the top, evaluating each opcode in
|
| -// sequence. An opcode group is evaluated until the first comparison that
|
| -// returns false. At that point the rest of the group is skipped and evaluation
|
| -// resumes with the first comparison of the next group. When all the comparisons
|
| -// in a group have evaluated to true and the action is reached. The group is
|
| -// considered a matching group.
|
| -//
|
| -// In the 'ShortEval' mode evaluation stops when it reaches the end or the first
|
| -// matching group. The action opcode from this group is the resulting policy
|
| -// action.
|
| -//
|
| -// In the 'RankedEval' mode evaluation stops only when it reaches the end of the
|
| -// the opcode stream. In the process all matching groups are saved and at the
|
| -// end the 'best' group is selected (what makes the best is TBD) and the action
|
| -// from this group is the resulting policy action.
|
| -//
|
| -// As explained above, the policy evaluation of a group is a logical AND of
|
| -// the evaluation of each opcode. However an opcode can request kPolUseOREval
|
| -// which makes the evaluation to use logical OR. Given that each opcode can
|
| -// request its evaluation result to be negated with kPolNegateEval you can
|
| -// achieve the negation of the total group evaluation. This means that if you
|
| -// need to express:
|
| -// if (!(c1 && c2 && c3))
|
| -// You can do it by:
|
| -// if ((!c1) || (!c2) || (!c3))
|
| -//
|
| -
|
| -// Possible outcomes of policy evaluation.
|
| -enum PolicyResult {
|
| - NO_POLICY_MATCH,
|
| - POLICY_MATCH,
|
| - POLICY_ERROR
|
| -};
|
| -
|
| -// Policy evaluation flags
|
| -// TODO(cpu): implement the options kStopOnErrors & kRankedEval.
|
| -//
|
| -// Stop evaluating as soon as an error is encountered.
|
| -const uint32_t kStopOnErrors = 1;
|
| -// Ignore all non fatal opcode evaluation errors.
|
| -const uint32_t kIgnoreErrors = 2;
|
| -// Short-circuit evaluation: Only evaluate until opcode group that
|
| -// evaluated to true has been found.
|
| -const uint32_t kShortEval = 4;
|
| -// Discussed briefly at the policy design meeting. It will evaluate
|
| -// all rules and then return the 'best' rule that evaluated true.
|
| -const uint32_t kRankedEval = 8;
|
| -
|
| -// This class evaluates a policy-opcode stream given the memory where the
|
| -// opcodes are and an input 'parameter set'.
|
| -//
|
| -// This class is designed to be callable from interception points
|
| -// as low as the NtXXXX service level (it is not currently safe, but
|
| -// it is designed to be made safe).
|
| -//
|
| -// Its usage in an interception is:
|
| -//
|
| -// POLPARAMS_BEGIN(eval_params)
|
| -// POLPARAM(param1)
|
| -// POLPARAM(param2)
|
| -// POLPARAM(param3)
|
| -// POLPARAM(param4)
|
| -// POLPARAM(param5)
|
| -// POLPARAMS_END;
|
| -//
|
| -// PolicyProcessor pol_evaluator(policy_memory);
|
| -// PolicyResult pr = pol_evaluator.Evaluate(ShortEval, eval_params,
|
| -// _countof(eval_params));
|
| -// if (NO_POLICY_MATCH == pr) {
|
| -// EvalResult policy_action = pol_evaluator.GetAction();
|
| -// // apply policy here...
|
| -// }
|
| -//
|
| -// Where the POLPARAM() arguments are derived from the intercepted function
|
| -// arguments, and represent all the 'interesting' policy inputs, and
|
| -// policy_memory is a memory buffer containing the opcode stream that is the
|
| -// relevant policy for this intercept.
|
| -class PolicyProcessor {
|
| - public:
|
| - // policy_buffer contains opcodes made with OpcodeFactory. They are usually
|
| - // created in the broker process and evaluated in the target process.
|
| -
|
| - // This constructor is just a variant of the previous constructor.
|
| - explicit PolicyProcessor(PolicyBuffer* policy)
|
| - : policy_(policy) {
|
| - SetInternalState(0, EVAL_FALSE);
|
| - }
|
| -
|
| - // Evaluates a policy-opcode stream. See the comments at the top of this
|
| - // class for more info. Returns POLICY_MATCH if a rule set was found that
|
| - // matches an active policy.
|
| - PolicyResult Evaluate(uint32_t options,
|
| - ParameterSet* parameters,
|
| - size_t parameter_count);
|
| -
|
| - // If the result of Evaluate() was POLICY_MATCH, calling this function returns
|
| - // the recommended policy action.
|
| - EvalResult GetAction() const;
|
| -
|
| - private:
|
| - struct {
|
| - size_t current_index_;
|
| - EvalResult current_result_;
|
| - } state_;
|
| -
|
| - // Sets the currently matching action result.
|
| - void SetInternalState(size_t index, EvalResult result);
|
| -
|
| - PolicyBuffer* policy_;
|
| - DISALLOW_COPY_AND_ASSIGN(PolicyProcessor);
|
| -};
|
| -
|
| -} // namespace sandbox
|
| -
|
| -#endif // SANDBOX_SRC_POLICY_ENGINE_PROCESSOR_H__
|
|
|