Files
OpenCellular/firmware
Andrey Ulanov 1eb83efdba cgpt repair: fix segfault which occurs when one of the headers is bad
When one of GPT headers is invalid the corresponding partition table
is not loaded and corresponding pointers in GptData are NULL.
GptRepair will try to memcpy one entries table to another which
results in SIGSEGV.

This change fixes it by freeing and then reallocating bad copy of
partition table. This potentially fixes problems which would occur
if two tables have different size.

Change that initially introduced this problem by not always allocating
secondary_entries:
https://chromium-review.googlesource.com/223800

TEST="cgpt repair" works where it previously didn't
TEST=make runtests
BUG=brillo:1203
BRANCH=none

Change-Id: Ibb2fcf33faa5ba157b0865d04c90ee3f26eee113
Reviewed-on: https://chromium-review.googlesource.com/276766
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Andrey Ulanov <andreyu@google.com>
Tested-by: Andrey Ulanov <andreyu@google.com>
2015-06-13 02:53:36 +00:00
..

Here's what's what in the firmware/ directory.

include/
lib/

  These are the original structures and APIs used in the earliest
  Chromebooks and continuing through 2014. It never had a version as such to
  begin with, but we now refer to this implementation as "vboot1" or
  "vboot version 1.0".

linktest/
stub/

  These are stubs used to link the vboot1 libraries into host-side test
  executables so we can run some tests on the build machine instead of a
  Chromebook.

2lib/

  In 2014 we began work on a new vboot API. The first step was just a
  refactoring and renaming of the verification API. The public functions and
  external headers that are exported for use by the Chrome OS firmware (or
  anything else that wants to use vboot) live in here. The internal
  structures and implementations go elsewhere.

lib20/

  This is an early implementation of the public (2lib/) API. It is
  binary-compatible with vboot1, so although the interface details are
  different, any existing on-device structures or signatures created by the
  vboot1 tools can be validated using this implementation.

  This was deployed slightly before it was ready. That's not a problem,
  thanks to the binary compatibility, but this directory will be abandoned
  Real Soon Now, except for the product support branches.

lib21/

  This is where the current development of the second-generation vboot API
  is taking place. It uses the public (2lib/) API, but will NOT be binary
  compatible with vboot1 structs. Because of the early release of the lib20
  stuff, we're actually calling this lib21.