blob: d5ea22c50f70740c1ccbee5bbee3bf5e1a15d7c7 [file] [log] [blame]
# Copyright 2016 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.
import logging
import os
from autotest_lib.client.bin import test, utils
from autotest_lib.client.common_lib import error
class security_CroshModules(test.test):
"""Make sure no surprise crosh modules end up installed."""
version = 1
CROSH_DIR = '/usr/share/crosh'
MODULE_DIRS = ('dev.d', 'extra.d', 'removable.d')
def load_whitelist(self):
"""Load the list of permitted files."""
with open(os.path.join(self.bindir, 'whitelist')) as fp:
return set(line.strip() for line in fp
if line and not line.startswith('#'))
def run_once(self):
"""
Do a find on the system for crosh modules and compare against whitelist.
Fail if unknown modules are found on the system.
"""
cmd = 'cd %s && find %s -type f' % (
self.CROSH_DIR, ' '.join(self.MODULE_DIRS))
cmd_output = utils.system_output(cmd, ignore_status=True)
observed_set = set(cmd_output.splitlines())
baseline_set = self.load_whitelist()
# Report observed set for debugging.
for line in observed_set:
logging.debug('%s: %s', self.CROSH_DIR, line)
# Fail if we find new binaries.
new = observed_set.difference(baseline_set)
if len(new):
message = 'New modules: %s' % (', '.join(new),)
raise error.TestFail(message)
else:
logging.debug('OK: whitelist matches system')