普通文本  |  60行  |  1.84 KB

# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

__author__ = 'ups@chromium.org (Stephan Uphoff)'

import logging
import os
import utils

from autotest_lib.client.bin import utils, test
from autotest_lib.client.common_lib import error


class security_ChromiumOSLSM(test.test):
    """
    Verify Chromium OS Security Module behaves as expected.
    """
    version = 1

    def _mount(self, target):
        cmd = "mount -c -n -t tmpfs -o nodev,noexec,nosuid test %s" % (target)
        return utils.system(cmd, ignore_status=True)

    def _umount(self, target):
        utils.system('umount -n %s' % (target))

    def _check_mount(self, target, expected, msg):
        succeeded = (self._mount(target) == 0)
        if succeeded:
            self._umount(target)
        if succeeded != expected:
            logging.error(msg)
            return 1
        return 0

    def run_once(self):
        errors = 0
        test_dir = '/tmp/chromium_lsm_test_dir'
        os.mkdir(test_dir, 0700)

        mnt_target = '%s/mount_point' % (test_dir)
        os.mkdir(mnt_target, 0700)

        sym_target = '%s/symlink' % (test_dir)
        os.symlink('mount_point', sym_target)

        # Mounting should succeed (no symbolic link in mount path).
        errors += self._check_mount(mnt_target, True,
                                    'Unable to mount on a directory')

        # Mounting should fail as we used a mount path with a symbolic link.
        errors += self._check_mount(sym_target, False,
                                    'Unexpectedly mounted on a symlink')

        utils.system('rm -rf ' + test_dir)
        # If self.error is not zero, there were errors.
        if errors > 0:
            raise error.TestFail('Failed %d tests' % errors)