blob: 68062be80d5db324adcd816a51a8b18727c67417 [file] [log] [blame]
Puthikorn Voravootivat84d5afc2020-01-14 14:50:19 -08001# Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import logging, os, subprocess
6
7from autotest_lib.client.bin import test, utils
8from autotest_lib.client.common_lib import error
9
10class hardware_UnsafeMemory(test.test):
11 """
12 This test runs for the specified number of seconds
13 checking for user-controllable memory corruption using
14 the rowhammer-test tools:
15 https://code.google.com/a/google.com/p/rowhammer-test
16 """
17
18 version = 1
19 _DIR_NAME = 'rowhammer-test-4d619293e1c7'
20
21 def setup(self):
22 os.chdir(os.path.join(self.srcdir, self._DIR_NAME))
23 utils.make('clean')
24 utils.make('all')
25
26 def get_thermals(self):
27 therm0 = '-'
28 therm1 = '-'
29 try:
30 therm0 = utils.read_file(
31 '/sys/devices/virtual/thermal/thermal_zone0/temp')
32 except:
33 pass
34 try:
35 therm1 = utils.read_file(
36 '/sys/devices/virtual/thermal/thermal_zone1/temp')
37 except:
38 pass
39 return (therm0, therm1)
40
41 def run_once(self, sec=(60*25)):
42 """
43 Executes the test and logs the output.
44
45 @param sec: seconds to test memory
46 """
47 self._hammer_path = os.path.join(self.srcdir, self._DIR_NAME,
48 'rowhammer_test')
49 logging.info('cmd: %s %d' % (self._hammer_path, sec))
50 # Grab the CPU temperature before hand if possible.
51 logging.info('start temp: %s %s' % self.get_thermals())
52 try:
53 output = subprocess.check_output([self._hammer_path, '%d' % sec])
54 logging.info("run complete. Output below:")
55 logging.info(output)
56 except subprocess.CalledProcessError, e:
57 logging.error("Unsafe memory found!")
58 logging.error(e.output)
59 logging.info('end temp: %s %s' % self.get_thermals())
60 raise error.TestFail('Unsafe memory found!')
61 logging.info('end temp: %s %s' % self.get_thermals())
62 return True