Skip to content

Commit

Permalink
[hdprefix] Avoid attempts to read beyond the end of the disk
Browse files Browse the repository at this point in the history
When booting from a hard disk image (e.g. bin/ipxe.usb) within an
emulator such as QEMU, the disk may not exist beyond the end of the
image.  Limit all reads to the length of the image to avoid spurious
errors when loading the iPXE image.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Jun 14, 2017
1 parent 1fdf4dd commit 84e2551
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/arch/x86/prefix/hdprefix.S
Expand Up @@ -27,14 +27,18 @@ load_image:
popw %es
popal

1: /* Read to end of current track */
1: /* Read to end of current track (or end of image) */
movb %cl, %al
negb %al
addb max_sector, %al
incb %al
andb $0x3f, %al
movzbl %al, %eax
call *read_sectors
movl load_length, %ebx
cmpl %eax, %ebx
ja 2f
movl %ebx, %eax
2: call *read_sectors
jc load_failed

/* Update %es */
Expand All @@ -53,12 +57,12 @@ load_image:
orb $0x01, %cl
incb %dh
cmpb max_head, %dh
jbe 2f
jbe 3f
xorb %dh, %dh
incb %ch
jnc 2f
jnc 3f
addb $0xc0, %cl
2:
3:
/* Loop until whole image is read */
subl %eax, load_length
ja 1b
Expand Down

0 comments on commit 84e2551

Please sign in to comment.