blob: a218fa8110350ab8878046dc22372f3c58a0cecb [file] [log] [blame]
# 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)