diff options
author | Matt Fleming <matt.fleming@intel.com> | 2013-07-22 13:41:00 +0100 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-07-22 14:30:32 +0100 |
commit | c6b80d76a6e1f76cdb5f1deaf298514843d0116a (patch) | |
tree | 4e891f4fba486828236f4ceb8f416110b3e2aed7 /core/ldlinux-c.c | |
parent | 56973f80f2728d3418b09047a7b023aa3c46e6e2 (diff) | |
download | syslinux-6.02-pre9.tar.gz |
derivative_info: be sure not to dereference pointerssyslinux-6.02-pre9
All the BIOS get_derivative_info() implementations are incorrect. They
all dereference pointers to various deriviative-specific data objects
instead of using the address of the objects.
This broke chain loading on SYSLINUX because the ->partoffset field
contained the dereferenced value of 'Hidden' rather than the address.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'core/ldlinux-c.c')
-rw-r--r-- | core/ldlinux-c.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/core/ldlinux-c.c b/core/ldlinux-c.c index 0b9aa76d..1d01d9a7 100644 --- a/core/ldlinux-c.c +++ b/core/ldlinux-c.c @@ -3,9 +3,9 @@ #include <fs.h> extern uint8_t DriveNumber; -extern far_ptr_t PartInfo; -extern far_ptr_t OrigESDI; -extern const uint64_t *Hidden; +extern void *PartInfo; +extern uint32_t OrigESDI; +extern const uint64_t Hidden; __export void get_derivative_info(union syslinux_derivative_info *di) { @@ -13,7 +13,7 @@ __export void get_derivative_info(union syslinux_derivative_info *di) di->disk.sector_shift = SectorShift; di->disk.drive_number = DriveNumber; - di->disk.ptab_ptr = GET_PTR(PartInfo); - di->disk.esdi_ptr = GET_PTR(OrigESDI); - di->disk.partoffset = Hidden; + di->disk.ptab_ptr = &PartInfo; + di->disk.esdi_ptr = &OrigESDI; + di->disk.partoffset = &Hidden; } |