Commit Graph

184 Commits

Author SHA1 Message Date
Gaurav Shah
0ec7078d5b Rewrite gen_fuzz_test_cases.sh script to use new signing utilities.
TEST=Generated images verify successfully using right keys.

Review URL: http://codereview.chromium.org/2836036
2010-06-29 19:46:11 -07:00
Randall Spangler
c4a011a725 TBR: wfrichar
Fix LoadKernel() checking key block flags

BUG=none
TEST=none
2010-06-29 19:08:43 -07:00
Gaurav Shah
4d78d9a4fb Add a script to generate test vboot-format public keys.
Also add .vpubks for the existing test keys.

TEST=Ran the script.

Review URL: http://codereview.chromium.org/2873033
2010-06-29 17:29:18 -07:00
Luigi Semenzato
2b9ddae52b New rollback_index API.
Review URL: http://codereview.chromium.org/2869022
2010-06-28 13:34:31 -07:00
Will Drewry
46186faf46 utility: add a simple tool for dumping the kernel config
Adds dump_kernel_config.c which takes in a file, reads it
all in to memory, then walks the blob until it can determine
the location of the kernel command line.

This is needed to allow the kernel config to inform legacy bootloader
configuration during autoupdates without packaging up dm-verity specific
options in some additional update metadata.

TEST=manual run over build_kernel_image.sh output
BUG=chromium-os:327

Review URL: http://codereview.chromium.org/2811029
2010-06-25 13:40:43 -05:00
vbendeb
e548e85d3a Keep temp files in the output directory.
Also, make sure that the regenerated version gets
automatically added to the set of changed files.

Tested by rebuilding the tree and observing the
`git status' output.

Review URL: http://codereview.chromium.org/2809040
2010-06-24 17:24:01 -07:00
vbendeb
3ecaf776d8 Make vboot_reference build in MSVC command line environment.
This is a mostly NOOP change which modifies the source code
to compile cleanly in the MSVC command line build
environment.

A new makefile is introduced (msc/nmakefile) along with a
README.txt in the same directory explaining how to build
the code in the DOS window. As of this submission the build
is running in a 32 bit environment, the intention is to use
the same makefile for 64 bit builds in the future.

Enabling high compilation warnings level allowed to
identify a couple of bugs in the code which are being fixed.

Not all sources are being compiled in the MSVC environment,
only those in firmware/ and most of those in test/
subdirectories. The benchmark calculations require porting
of the timer facilities and are being postponed.

TEST

Built in DOS and linux environments. Ran unit tests in
linux environment.

Review URL: http://codereview.chromium.org/2809037
2010-06-24 16:19:53 -07:00
Randall Spangler
d6aad3a088 Ignore TPM return codes in recovery mode
Review URL: http://codereview.chromium.org/2844024
2010-06-24 14:01:34 -07:00
Luigi Semenzato
f6ddd64c3a Automated version generation for vboot firmware.
Review URL: http://codereview.chromium.org/2817025
2010-06-24 08:11:24 -07:00
Randall Spangler
d0d48b58a1 Add boot flags to LoadFirmware(), for TPM init
Review URL: http://codereview.chromium.org/2865015
2010-06-23 21:51:13 -07:00
Randall Spangler
e2ec98412e Add VBDEBUG macro for debug output.
Replaced in firmware/ lib; not replaced in host-side utils/tests.

Review URL: http://codereview.chromium.org/2810026
2010-06-23 21:17:07 -07:00
Randall Spangler
07f7865227 fix passing key out of LoadFirmware
Review URL: http://codereview.chromium.org/2825019
2010-06-23 19:42:09 -07:00
Randall Spangler
1078838fff Refactor rollback interface for LoadKernel(), LoadFirmware().
Review URL: http://codereview.chromium.org/2861020
2010-06-23 15:35:31 -07:00
Randall Spangler
1114b661f5 move biosincludes
Review URL: http://codereview.chromium.org/2809035
2010-06-23 13:02:43 -07:00
Randall Spangler
b9d60a52b7 Even more integration fixes.
Review URL: http://codereview.chromium.org/2849021
2010-06-23 12:43:01 -07:00
Bill Richardson
249677d0ad Add some debug output to vbutil_kernel, display values in hex.
Review URL: http://codereview.chromium.org/2859019
2010-06-23 11:16:37 -07:00
Randall Spangler
81d0996901 Assorted integration fixes.
MSVC does not like bitfields with extra bits in them, so it made the GptEntry struct too big.

Fixed a missing return value in LoadFirmware().

Added some debug output.

Fixed calls to SetupTPM().

Tested with 'make && make runtests'.  No errors.

Review URL: http://codereview.chromium.org/2865014
2010-06-23 10:15:38 -07:00
Luigi Semenzato
361049ce19 As mentioned, I discovered ForceClear doesn't really require any reboots. This change takes advantage of this fact.
Note that I am still using TPM_MUST_REBOOT because if power is lost between ForceClear and resetting the deactivated flag, the TPM will *really* be disabled at the next reboot, and it's nice to fix this problem automatically.

Review URL: http://codereview.chromium.org/2859016
2010-06-22 13:37:53 -07:00
Randall Spangler
d0dae7a438 More cleanup of MSVC errors
Review URL: http://codereview.chromium.org/2871019
2010-06-21 18:25:31 -07:00
Randall Spangler
beb5bae09f Fixes to compiler warnings in MSVC
Review URL: http://codereview.chromium.org/2851015
2010-06-21 16:33:26 -07:00
vbendeb
f7a45cc01d Reduce attributes size to comply with msc limitations.
It turned out that shared verified boot library fails to
work properly when compiled by msc in BIOS environment.

The culprit was identified as failing 64 bit logical
operations by preprocessor. It is probably possible to
come up with a certain compile flag set to fix the
operations, but it is not easy to modify and control the BIOS
compilation environment.

The alternative solution is to limit the size of the field
in question to 16 bits (especially since this is the only
part of the attributes field which is supposed to be
altered by firmware.

A union is being introduced in firmware/lib/cgptlib/include/gpt.h:GptEntry to allow
accessing the field both as a 64 bit entity and a top
16 bit field. All places where this field is used are
being modified appropriately.

tests/Makefile is being fixed to allow controlling test run
from the top level directory.

Tested by building everything and running tests.
All tests pass.

Review URL: http://codereview.chromium.org/2799019
2010-06-21 08:44:16 -07:00
vbendeb
6216f5abe9 Include BIOS specific definitions when required.
This is a noop for host/chroot environment. When compiling
in the firmware space the standard include files will not be
included, the definitions will be supplied by the BIOS,
through the new file (firmware/include/sysincludes.h).

Testing
=======

RUNTESTS=1 make

in the top level directory succeeds, confirming that the
tree compiles cleanly and the unit tests pass.

Review URL: http://codereview.chromium.org/2862019
2010-06-21 08:40:26 -07:00
Randall Spangler
620c38cf34 Remove unused files, and tidy the directory structure of the remaining ones.
Review URL: http://codereview.chromium.org/2815011
2010-06-17 14:45:22 -07:00
Gaurav Shah
d52030f340 vboot_reference: Fix Watchlists
Review URL: http://codereview.chromium.org/2777005
2010-06-17 13:22:34 -07:00
vbendeb
cae179aaf9 This CL makes sure that the tests dirctory Makefile works
properly, i.e. rebuild relevant targets if any of the
dependencies (implicit or explicit) change.

To make dependency generation easier the three source files
in the tests directory shared among many programs
(rollback_index_mock.c test_common.c timer_utils.c and
crc32_test.c) are separated into a library, with each of
them getting its own the automated dependency script
generated by the compiler.

To simplify rule definitions, all applications built in the
test directory get linked with -lcrypto and -lrt, which is
not a problem as the linker will not use the library unless
needed.

Tested by touching different .h and .c files in ./tests,
running make and then and observing the make results.

Also verified that emerging works for x86 in chroot environment.

Review URL: http://codereview.chromium.org/2847012
2010-06-16 13:56:58 -07:00
Randall Spangler
f302905224 Move all system includes in vboot_firmware to sysincludes.h
This makes it much easier to port vboot_firmware to platforms (such as
UEFI) which don't have the standard include files; only sysincludes.h
needs to be altered.

Review URL: http://codereview.chromium.org/2833012
2010-06-16 13:42:58 -07:00
Randall Spangler
bd529f05dd Move old vkernel code out of vboot_firmware.
It will go away entirely once the build has moved to vboot_kernel.

Review URL: http://codereview.chromium.org/2866006
2010-06-16 12:51:26 -07:00
vbendeb
2a0155663e One of the last moment mods of the original make rework
CL (http://codereview.chromium.org/2845001) resulted in broken
dependencies.

This CL completes the modification (the trick is to ensure
that the default target is always the first).

Note that the tests subdirectory Makefile still does not
properly follow the dependencies, it will have to be
addressed in a separate CL.

Tested by touching different .h and .c files and observing the results.

Review URL: http://codereview.chromium.org/2819004
2010-06-16 12:49:31 -07:00
Randall Spangler
d471f2a839 Remove old firmware verification code, now that firmware build has switched to the new algorithms.
Review URL: http://codereview.chromium.org/2835006
2010-06-16 12:05:10 -07:00
Randall Spangler
695cd16f13 Add load_kernel2_test
Add debug messages to LoadKernel2()

Review URL: http://codereview.chromium.org/2800007
2010-06-15 23:38:23 -07:00
Randall Spangler
e995895b18 Explicitly pack vboot_struct structures, since they're going on disk.
Review URL: http://codereview.chromium.org/2829004
2010-06-15 21:36:24 -07:00
Bill Richardson
962483c1e2 This fixes the EFI BIOS boot problems introduced with cgpt.
There were two changes. First, we need to pack the GPT header to make it
match the spec (duh). Second, there's a subtle bug in how the BIOS recovers
from corrupted headers. The EFI spec says that the primary GPT header must
be at sector 1 (counting from zero) and the secondary GPT header must be at
the last sector on the drive. The BIOS correctly looks in those locations to
find the headers. However, if the secondary GPT header is invalid (as it
usually is due to our build process), the BIOS is supposed to update it from
the primary header. In this case, rather than write to the last sector on
the drive where it just looked, the BIOS trusts the alternate_lba field of
the primary header. That field is supposed to point to the secondary header
location, but the BIOS just blindly uses it no matter where it points. The
cgpt tool wasn't initializing that field, so it pointed to sector 0, which
is the PMBR. The BIOS overwrote that, resulting in an unbootable drive.

Review URL: http://codereview.chromium.org/2844006
2010-06-15 21:07:18 -07:00
vbendeb
c5e5f4ef55 The code compiled fine on the desktop, but causes a warning in the chroot environment, which in turn causes make to stop.
The fix is to use an explicit format statement.

Tested in chroot environment for x86-generic - was failing before the fix and passes after the fix.

TBR: msb

Review URL: http://codereview.chromium.org/2808009
2010-06-15 18:54:26 -07:00
Randall Spangler
a55e5ca76c Refactor LoadFirmware() to avoid global variables, which don't work when running out of ROM
Review URL: http://codereview.chromium.org/2848006
2010-06-15 18:45:09 -07:00
vbendeb
e3b4ac96bc Rough first draft of the firmware signing utility.
Based on utility/vbutil_kernel.c.

Should be merged with it eventually. Not really tested either, suggesting to submit it just to have a baseline for the verified boot chain.

Review URL: http://codereview.chromium.org/2792014
2010-06-15 15:01:20 -07:00
Randall Spangler
39ed88efe9 Implemented pipelined hash calculation in LoadFirmware()
Review URL: http://codereview.chromium.org/2802002
2010-06-15 14:53:01 -07:00
Randall Spangler
dcab8fab94 Add vbutil_firmware
Review URL: http://codereview.chromium.org/2837005
2010-06-15 14:50:51 -07:00
Luigi Semenzato
63ca39c4a9 Add ForceClear also on dev->normal transitions. Fix wrong API description.
Review URL: http://codereview.chromium.org/2807006
2010-06-15 13:33:01 -07:00
Axel Hansen
38476532ad Fixed VerifyFirmwarePreamble to check for a valid signing algorithm
Changed VerifyFirmwarePreamble to check for a valid kernel_subkey_sign_algorithm from the preamble.
Originally, an incorrect kernel_subkey_sign_algorithm wouldn't be detected and could cause the RSA
verification to read past the end of a buffer.

Review URL: http://codereview.chromium.org/2837002
Patch from Axel Hansen <axelrh@google.com>.
2010-06-15 10:53:18 -07:00
Luigi Semenzato
2666f10dec Fix normal/recovery mode, and RO firmware vs. RW firmware behavior.
Review URL: http://codereview.chromium.org/2792009
2010-06-15 08:12:32 -07:00
Randall Spangler
81d696f394 fix typos in load_kernel_test
Review URL: http://codereview.chromium.org/2820004
2010-06-14 17:23:32 -07:00
vbendeb
70e9509a27 Rework the vboot_reference make system.
After this change the generated files are placed in a
separate tree (such thet they don't show in the
`git status' output anymore) and the dependencies are
followed properly (if a .h file changes the
appropriate .o files and apps get rebuilt).

Tested as follows:

> $ make clean
> $ make # build succeeds
> $ git status # shows clean directory
> $ RUNTESTS=1 make # (captured test output matches that of the test run before any changes)
> $ touch ./vboot_firmware/include/tlcl.h
> $ make  # make succeeds
> $ find build -type f -newer ./vboot_firmware/include/tlcl.h
build/vboot_firmware/lib/rollback_index.o
build/vboot_firmware/lib/rollback_index.o.d
build/vboot_firmware/a.out
build/vboot_fw.a
build/utility/vbutil_key
build/utility/kernel_utility.d
build/utility/vbutil_key.d
build/utility/verify_data
build/utility/load_kernel_test.d
build/utility/vbutil_keyblock.d
build/utility/vbutil_kernel
build/utility/vbutil_kernel.d
build/utility/firmware_utility
build/utility/signature_digest_utility.d
build/utility/kernel_utility
build/utility/verify_data.d
build/utility/vbutil_keyblock
build/utility/signature_digest_utility
build/utility/load_kernel_test
build/utility/firmware_utility.d
build/tests/vboot_common3_tests
build/tests/vboot_common2_tests
build/host/a.out
$ >

Review URL: http://codereview.chromium.org/2845001
2010-06-14 15:41:27 -07:00
Randall Spangler
83c88cfa69 More cleanup
Review URL: http://codereview.chromium.org/2718012
2010-06-11 16:14:18 -07:00
Randall Spangler
729b87258b Clean up of key block functions
No substantial new code, just making the old code consistent.

Review URL: http://codereview.chromium.org/2729021
2010-06-11 11:16:20 -07:00
Randall Spangler
7d6898dbaa Added vbutil_kernel.
Review URL: http://codereview.chromium.org/2730011
2010-06-11 09:22:13 -07:00
Bill Richardson
f1372d9109 Nearly complete rewrite of cgpt tool.
This fixes a number of bugs, adds a bunch of commands, and essentially makes
cgpt ready to use as a replacement for gpt. Still to do is to add commands
and options that will let it generated intentionally bad partitions, for use
in testing.

Review URL: http://codereview.chromium.org/2719008
2010-06-11 09:15:55 -07:00
Randall Spangler
6a97b3e2a1 Add vbutil_keyblock
Review URL: http://codereview.chromium.org/2748008
2010-06-10 17:55:02 -07:00
Randall Spangler
d55c645372 Utility to pack public key, version, algorithm into a single file in VbPublicKey format
Review URL: http://codereview.chromium.org/2762009
2010-06-10 12:43:51 -07:00
Luigi Semenzato
4f11c36ebc Protect the kernel version space from redefinition.
Review URL: http://codereview.chromium.org/2786005
2010-06-10 11:01:04 -07:00
Randall Spangler
d183644564 Major refactoring of structures, with unit tests. This matches the doc I sent out earlier.
Firmware-side code for LoadKernel() is in place now.  LoadFirmware() replacement coming soon.

The new functions are implemented in parallel to the existing ones (i.e., everything that used to work still does).

Review URL: http://codereview.chromium.org/2745007
2010-06-10 09:59:04 -07:00