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@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
master commit: 5f2875739b
master date: 2013-09-05 11:47:03 +0200
This commit is contained in:
Jan Beulich committed 2013-09-09 11:51:20 +02:00
1 parent 27e533159d
commit 8adf2629f0
4 files changed
+7 -7

No files matched your search

@@ -3,8 +3,6 @@
#define BIOS_INFO_PHYSICAL_ADDRESS 0x00001000
#define SEABIOS_PHYSICAL_ADDRESS 0x000E0000
#endif /* __HVMLOADER_CONFIG_SEABIOS_H__ */
/*
+4
View File
@@ -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 )
{
+2 -2
View File
@@ -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",
+1 -3
View File
@@ -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,
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.