Skip to content

Commit

Permalink
x86 setup: fix asm constraints in vesa_store_edid
Browse files Browse the repository at this point in the history
Impact: fix potential miscompile (currently believed non-manifest)

As the comment explains, the VBE DDC call can clobber any register.
Tell the compiler about that fact.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Andreas Schwab authored and Ingo Molnar committed Jan 30, 2009
1 parent 618b2c8 commit 7fc49f1
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions arch/x86/boot/video-vesa.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,8 @@ void vesa_store_edid(void)
we genuinely have to assume all registers are destroyed here. */

asm("pushw %%es; movw %2,%%es; "INT10"; popw %%es"
: "+a" (ax), "+b" (bx)
: "c" (cx), "D" (di)
: "esi");
: "+a" (ax), "+b" (bx), "+c" (cx), "+D" (di)
: : "esi", "edx");

if (ax != 0x004f)
return; /* No EDID */
Expand All @@ -285,9 +284,9 @@ void vesa_store_edid(void)
dx = 0; /* EDID block number */
di =(size_t) &boot_params.edid_info; /* (ES:)Pointer to block */
asm(INT10
: "+a" (ax), "+b" (bx), "+d" (dx), "=m" (boot_params.edid_info)
: "c" (cx), "D" (di)
: "esi");
: "+a" (ax), "+b" (bx), "+d" (dx), "=m" (boot_params.edid_info),
"+c" (cx), "+D" (di)
: : "esi");
#endif /* CONFIG_FIRMWARE_EDID */
}

Expand Down

0 comments on commit 7fc49f1

Please sign in to comment.