util/cbfstool: Improve heuristic for cbfs header pointer protection
cbfstool has a routine to deal with old images that may encourage it to overwrite the master header. That routine is triggered for "cbfstool add-master-header" prepared images even though these are not at risk, and - worse - destroys the chain structure (through a negative file length), so avoid touching such images. Change-Id: I9d0bbe3e6300b9b9f3e50347737d1850f83ddad8 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Reviewed-on: https://review.coreboot.org/13672 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
parent
0a07c5c4a0
commit
343ea08388
|
@ -110,11 +110,18 @@ static int cbfs_fix_legacy_size(struct cbfs_image *image, char *hdr_loc)
|
|||
// A bug in old cbfstool may produce extra few bytes (by alignment) and
|
||||
// cause cbfstool to overwrite things after free space -- which is
|
||||
// usually CBFS header on x86. We need to workaround that.
|
||||
// Except when we run across a file that contains the actual header,
|
||||
// in which case this image is a safe, new-style
|
||||
// `cbfstool add-master-header` based image.
|
||||
|
||||
struct cbfs_file *entry, *first = NULL, *last = NULL;
|
||||
for (first = entry = cbfs_find_first_entry(image);
|
||||
entry && cbfs_is_valid_entry(image, entry);
|
||||
entry = cbfs_find_next_entry(image, entry)) {
|
||||
/* Is the header guarded by a CBFS file entry? Then exit */
|
||||
if (((char *)entry) + ntohl(entry->offset) == hdr_loc) {
|
||||
return 0;
|
||||
}
|
||||
last = entry;
|
||||
}
|
||||
if ((char *)first < (char *)hdr_loc &&
|
||||
|
|
Loading…
Reference in New Issue