diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-03-26 22:57:55 -0500 |
---|---|---|
committer | Aaron Durbin <adurbin@google.com> | 2014-03-28 14:40:53 +0100 |
commit | 4f3bb801edffb27e7e52c297cf6cf5dc4ad22a95 (patch) | |
tree | bdbcafe715bbee133b05151587e09c81867c598f /util/cbfstool/common.h | |
parent | 2164831671aab4181bc7ba1d57237c4f782864e8 (diff) | |
download | coreboot-4f3bb801edffb27e7e52c297cf6cf5dc4ad22a95.tar.xz |
cbfstool: provide structure to linux payload builder
This change started with tracking down a bug where the trampoline
size was not being taken into account for sizing the output buffer
leading to a heap corruption. I was having a hard time keeping
track of what num_segments actually tracked as well as what parts
were being placed in the output buffer. Here's my attempt at
hopefully providing more clarity.
This change doesn't crash when adding a bzImage:
$ dd if=/dev/zero of=bb.bin bs=64 count=1
$ ./cbfstool tmp.rom create -s 4M -B bb.bin -m x86 -a 64
$ ./cbfstool tmp.rom add-payload -f ~/Downloads/bzImage -C "1" -n
"fallback"/payload
Change-Id: Ib1de1ddfec3c7102facffc5815c52b340fcdc628
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/5408
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Marc Jones <marc.jones@se-eng.com>
Diffstat (limited to 'util/cbfstool/common.h')
-rw-r--r-- | util/cbfstool/common.h | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/util/cbfstool/common.h b/util/cbfstool/common.h index 3cb94b6f9c..b1f25d0d20 100644 --- a/util/cbfstool/common.h +++ b/util/cbfstool/common.h @@ -63,6 +63,15 @@ static inline void buffer_set_size(struct buffer *b, size_t size) b->size = size; } +/* Initialize a buffer with the given constraints. */ +static inline void buffer_init(struct buffer *b, char *name, void *data, + size_t size) +{ + b->name = name; + b->data = data; + b->size = size; +} + /* * Splice a buffer into another buffer. If size is zero the entire buffer * is spliced while if size is non-zero the buffer is spliced starting at @@ -71,9 +80,7 @@ static inline void buffer_set_size(struct buffer *b, size_t size) static inline void buffer_splice(struct buffer *dest, const struct buffer *src, size_t offset, size_t size) { - dest->name = src->name; - dest->data = src->data; - dest->size = src->size; + buffer_init(dest, src->name, src->data, src->size); if (size != 0) { dest->data += offset; buffer_set_size(dest, size); |