[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] hvmloader: fix SeaBIOS interface
commit 5f2875739beef3a75c7a7e8579b6cbcb464e61b3 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Sep 5 11:47:03 2013 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Sep 5 11:47:03 2013 +0200 hvmloader: fix SeaBIOS interface The SeaBIOS ROM image may validly exceed 128k in size, it's only our interface code that so far assumed that it wouldn't. Remove that restriction by setting the base address depending on image size. Add a check to HVM loader so that too big images won't result in silent guest failure anymore. Uncomment the intended build-time size check for rombios, moving it into a function so that it would actually compile. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- tools/firmware/hvmloader/config-seabios.h | 2 -- tools/firmware/hvmloader/hvmloader.c | 4 ++++ tools/firmware/hvmloader/rombios.c | 4 ++-- tools/firmware/hvmloader/seabios.c | 4 +--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/firmware/hvmloader/config-seabios.h b/tools/firmware/hvmloader/config-seabios.h index e025243..c4d1142 100644 --- a/tools/firmware/hvmloader/config-seabios.h +++ b/tools/firmware/hvmloader/config-seabios.h @@ -3,8 +3,6 @@ #define BIOS_INFO_PHYSICAL_ADDRESS 0x00001000 -#define SEABIOS_PHYSICAL_ADDRESS 0x000E0000 - #endif /* __HVMLOADER_CONFIG_SEABIOS_H__ */ /* diff --git a/tools/firmware/hvmloader/hvmloader.c b/tools/firmware/hvmloader/hvmloader.c index 9c1cba2..1cc8cf2 100644 --- a/tools/firmware/hvmloader/hvmloader.c +++ b/tools/firmware/hvmloader/hvmloader.c @@ -292,8 +292,12 @@ int main(void) if ( bios->bios_load ) bios->bios_load(bios); else + { + BUG_ON(bios->bios_address + bios->image_size > + HVMLOADER_PHYSICAL_ADDRESS); memcpy((void *)bios->bios_address, bios->image, bios->image_size); + } if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) { diff --git a/tools/firmware/hvmloader/rombios.c b/tools/firmware/hvmloader/rombios.c index f6f5310..810bd24 100644 --- a/tools/firmware/hvmloader/rombios.c +++ b/tools/firmware/hvmloader/rombios.c @@ -127,6 +127,8 @@ static void rombios_load(const struct bios_config *config) uint32_t bioshigh; struct rombios_info *info; + BUILD_BUG_ON(sizeof(rombios) > 0x100000 - ROMBIOS_PHYSICAL_ADDRESS); + memcpy((void *)config->bios_address, config->image, config->image_size); @@ -206,8 +208,6 @@ static void rombios_create_smbios_tables(void) SMBIOS_PHYSICAL_END); } -//BUILD_BUG_ON(sizeof(rombios) > (0x00100000U - ROMBIOS_PHYSICAL_ADDRESS)); - struct bios_config rombios_config = { .name = "ROMBIOS", diff --git a/tools/firmware/hvmloader/seabios.c b/tools/firmware/hvmloader/seabios.c index f17e67b..dd7dfbe 100644 --- a/tools/firmware/hvmloader/seabios.c +++ b/tools/firmware/hvmloader/seabios.c @@ -133,15 +133,13 @@ static void seabios_setup_e820(void) dump_e820_table(e820, info->e820_nr); } -//BUILD_BUG_ON(sizeof(seabios) > (0x00100000U - SEABIOS_PHYSICAL_ADDRESS)); - struct bios_config seabios_config = { .name = "SeaBIOS", .image = seabios, .image_size = sizeof(seabios), - .bios_address = SEABIOS_PHYSICAL_ADDRESS, + .bios_address = 0x100000 - sizeof(seabios), .load_roms = NULL, -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |