libpayload: allow for pointers in cbfs ram media
The ram_map() handled offsets from 0->size as well as negative offsets from the top of the region. However, the cbfs core tries to map a offset that is actually a pointer within the region itself. Allow for such instances. This fixes an issue when using ram_media with tthe ebmedded SeaBIOS cbfs. BUG=chrome-os-partner:19691 BRANCH=none TEST=manual: used ram_media to parse embedded SeaBIOS cbfs properly. Change-Id: I15b0b3b643390d3784ae5887c0f17d420d59c5b6 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/56641 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Stefan Reinauer <reinauer@google.com>
This commit is contained in:
parent
2b6efcedd4
commit
91afd7004f
1 changed files with 6 additions and 0 deletions
|
|
@ -43,6 +43,12 @@ static int ram_open(struct cbfs_media *media) {
|
|||
|
||||
static void *ram_map(struct cbfs_media *media, size_t offset, size_t count) {
|
||||
struct ram_media *m = (struct ram_media*)media->context;
|
||||
|
||||
/* Special case an absolute pointer within the region. */
|
||||
if (offset >= (uintptr_t)m->start &&
|
||||
offset < ((uintptr_t)m->start + m->size))
|
||||
return (void *)offset;
|
||||
|
||||
/* assume addressing from top of image in this case */
|
||||
if (offset > 0xf0000000) {
|
||||
offset = m->size + offset;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue