From 901efea8abbb3131685fd69fd4ad7c5093c8cb3c Mon Sep 17 00:00:00 2001 From: Mathias Krause Date: Tue, 7 Feb 2017 19:47:16 +0100 Subject: [PATCH] libpayload: x86/exec - fix return value passing The pointer to write the return value to is in %ecx, not %eax. Writing to (%eax) leads to memory corruptions as %eax holds the return value, e.g. would write zero to address zero for a "successful" returning payload. Change-Id: I82df27ae89a9e3d25f479ebdda2b50ea57565459 Signed-off-by: Mathias Krause Reviewed-on: https://review.coreboot.org/18332 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Reviewed-by: Aaron Durbin --- payloads/libpayload/arch/x86/exec.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payloads/libpayload/arch/x86/exec.S b/payloads/libpayload/arch/x86/exec.S index c7595e979c..7d89cc00a5 100644 --- a/payloads/libpayload/arch/x86/exec.S +++ b/payloads/libpayload/arch/x86/exec.S @@ -85,7 +85,7 @@ i386_do_exec: */ movl 20(%ebp), %ecx - movl %eax, (%eax) + movl %eax, (%ecx) /* Get the rest of the saved registers */ popl %ecx