Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[romprefix] Update ROM checksum even if PMM allocation fails
There are code paths other than PMM allocation that can result in our
changing the ROM checksum.  For example, we attempt to update our
product string to incorporate the PCI bus:dev.fn number.  In a system
that does not support PMM, we could therefore end up with an incorrect
checksum.

Fix by attempting to update the checksum unconditionally.
  • Loading branch information
Michael Brown committed Feb 15, 2009
1 parent 79867d3 commit f16668d
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions src/arch/i386/prefix/romprefix.S
Expand Up @@ -345,20 +345,22 @@ got_pmm: /* PMM allocation succeeded */
shll $9, %ecx
addr32 rep movsb /* PMM presence implies flat real mode */
movl %edi, decompress_to
/* Shrink ROM and update checksum */
/* Shrink ROM */
movb $_prefix_memsz_sect, romheader_size
pmm_fail:
/* Restore upper register halves */
popal
no_pmm:

/* Update checksum */
xorw %bx, %bx
xorw %si, %si
movw $_prefix_memsz_sect, %cx
movb %cl, romheader_size
movzbw romheader_size, %cx
shlw $9, %cx
1: lodsb
addb %al, %bl
loop 1b
subb %bl, checksum
pmm_fail:
/* Restore upper register halves */
popal
no_pmm:

/* Copy self to option ROM space. Required for PCI3.0, which
* loads us to a temporary location in low memory. Will be a
Expand Down

0 comments on commit f16668d

Please sign in to comment.