Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 042cbaf8 authored by Andreas Schwab's avatar Andreas Schwab Committed by H. Peter Anvin
Browse files

x86 setup: fix asm constraints in vesa_store_edid



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: default avatarAndreas Schwab <schwab@suse.de>
Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parent 7cb36b6c
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -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 */
@@ -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 */
}