1#!/usr/bin/python
2#
3# Copyright (c) 2013 The Chromium Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import logging, os
8from autotest_lib.client.bin import test, utils
9from autotest_lib.client.common_lib import error
10
11class security_SMMLocked(test.test):
12    """
13    Verify SMM has SMRAM unmapped and that the SMM registers are locked.
14    """
15    version = 1
16    executable = 'smm'
17
18    def setup(self):
19        os.chdir(self.srcdir)
20        utils.make(self.executable)
21
22    def run_once(self):
23        cpu_arch = utils.get_cpu_arch()
24        if cpu_arch == "arm":
25            logging.debug('ok: skipping SMM test for %s.', cpu_arch)
26            return
27
28        r = utils.run("%s/%s" % (self.srcdir, self.executable),
29                      stdout_tee=utils.TEE_TO_LOGS,
30                      stderr_tee=utils.TEE_TO_LOGS,
31                      ignore_status=True)
32        if r.exit_status != 0 or len(r.stderr) > 0:
33            raise error.TestFail(r.stderr)
34        if 'skipping' in r.stdout:
35            logging.debug(r.stdout)
36            return
37        if 'ok' not in r.stdout:
38            raise error.TestFail(r.stdout)
39