| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 2 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 '''A module containing kernel handler class used by SAFT.''' | 6 '''A module containing kernel handler class used by SAFT.''' |
| 7 | 7 |
| 8 import re | 8 import re |
| 9 | 9 |
| 10 TMP_FILE_NAME = 'kernel_header_dump' | 10 TMP_FILE_NAME = 'kernel_header_dump' |
| 11 MAIN_STORAGE_DEVICE = '/dev/sda' | 11 MAIN_STORAGE_DEVICE = '/dev/sda' |
| 12 | 12 |
| 13 # Types of kernel modifications. | 13 # Types of kernel modifications. |
| 14 KERNEL_BODY_MOD = 1 | 14 KERNEL_BODY_MOD = 1 |
| 15 KERNEL_VERSION_MOD = 2 | 15 KERNEL_VERSION_MOD = 2 |
| 16 | 16 |
| 17 |
| 18 class KernelHandlerError(Exception): |
| 19 pass |
| 20 |
| 21 |
| 17 class KernelHandler(object): | 22 class KernelHandler(object): |
| 18 '''An object to provide ChromeOS kernel related actions. | 23 '''An object to provide ChromeOS kernel related actions. |
| 19 | 24 |
| 20 Mostly it allows to corrupt and restore a particular kernel partition | 25 Mostly it allows to corrupt and restore a particular kernel partition |
| 21 (designated by the partition name, A or B. | 26 (designated by the partition name, A or B. |
| 22 ''' | 27 ''' |
| 23 | 28 |
| 24 # This value is used to alter contents of a byte in the appropriate kernel | 29 # This value is used to alter contents of a byte in the appropriate kernel |
| 25 # image. First added to corrupt the image, then subtracted to restore the | 30 # image. First added to corrupt the image, then subtracted to restore the |
| 26 # image. | 31 # image. |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 def restore_kernel(self, section): | 104 def restore_kernel(self, section): |
| 100 '''Restore the previously corrupted kernel.''' | 105 '''Restore the previously corrupted kernel.''' |
| 101 self._modify_kernel(section.upper(), -self.DELTA) | 106 self._modify_kernel(section.upper(), -self.DELTA) |
| 102 | 107 |
| 103 def get_version(self, section): | 108 def get_version(self, section): |
| 104 '''Return version read from this section blob's header.''' | 109 '''Return version read from this section blob's header.''' |
| 105 return self.partition_map[section.upper()]['version'] | 110 return self.partition_map[section.upper()]['version'] |
| 106 | 111 |
| 107 def set_version(self, section, version): | 112 def set_version(self, section, version): |
| 108 '''Set version of this kernel blob and re-sign it.''' | 113 '''Set version of this kernel blob and re-sign it.''' |
| 114 if version < 0: |
| 115 raise KernelHandlerError('Bad version value %d' % version) |
| 109 self._modify_kernel(section.upper(), version, KERNEL_VERSION_MOD) | 116 self._modify_kernel(section.upper(), version, KERNEL_VERSION_MOD) |
| 110 | 117 |
| 111 def init (self, chros_if): | 118 def init (self, chros_if): |
| 112 '''Initialize the kernel handler object. | 119 '''Initialize the kernel handler object. |
| 113 | 120 |
| 114 Input argument is a ChromeOS interface object reference. | 121 Input argument is a ChromeOS interface object reference. |
| 115 ''' | 122 ''' |
| 116 self.chros_if = chros_if | 123 self.chros_if = chros_if |
| 117 self.dump_file_name = chros_if.state_dir_file(TMP_FILE_NAME) | 124 self.dump_file_name = chros_if.state_dir_file(TMP_FILE_NAME) |
| 118 self._get_partition_map() | 125 self._get_partition_map() |
| OLD | NEW |