In commit b6d11d7c4678 ("MdePkg: BaseIoLibIntrinsic (IoLib class)
library", 2017-04-12), the MOV instructions in the write loops were
probably copied from the read loops. However, the operand order was not
adjusted.As a result, the IoWriteFifoXX() routines, when invoked in SEV guests, now overwrite the source buffer with value 0x01 / 0x0001 / 0x00000001 -- the SevNoRepIo() function returns value 1 in EAX, in SEV guests --, and write the same value to the target IO port. Fix this by putting the target operand (AL / AX / EAX) first, and the source operand (BYTE / WORD / DWORD [ESI/RSI]) second. Cc: Brijesh Singh <[email protected]> Cc: Jordan Justen <[email protected]> Cc: Liming Gao <[email protected]> Cc: Michael D Kinney <[email protected]> Fixes: b6d11d7c467810ea7f2e2eda46ef0bdc57bf1475 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <[email protected]> --- MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm | 6 +++--- MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm index 3e80c17d04a3..4b2af807cff8 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm +++ b/MdePkg/Library/BaseIoLibIntrinsic/Ia32/IoFifoSev.nasm @@ -212,7 +212,7 @@ ASM_PFX(IoWriteFifo8): jecxz @IoWriteFifo8_Done @IoWriteFifo8_Loop: - mov byte [esi], al + mov al, byte [esi] out dx, al inc esi loop @IoWriteFifo8_Loop @@ -250,7 +250,7 @@ ASM_PFX(IoWriteFifo16): jecxz @IoWriteFifo16_Done @IoWriteFifo16_Loop: - mov word [esi], ax + mov ax, word [esi] out dx, ax add esi, 2 loop @IoWriteFifo16_Loop @@ -288,7 +288,7 @@ ASM_PFX(IoWriteFifo32): jecxz @IoWriteFifo32_Done @IoWriteFifo32_Loop: - mov dword [esi], eax + mov eax, dword [esi] out dx, eax add esi, 4 loop @IoWriteFifo32_Loop diff --git a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm index 26e016625b72..4d86a6cd5330 100644 --- a/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm +++ b/MdePkg/Library/BaseIoLibIntrinsic/X64/IoFifoSev.nasm @@ -205,7 +205,7 @@ ASM_PFX(IoWriteFifo8): jrcxz @IoWriteFifo8_Done @IoWriteFifo8_Loop: - mov byte [rsi], al + mov al, byte [rsi] out dx, al inc rsi loop @IoWriteFifo8_Loop @@ -241,7 +241,7 @@ ASM_PFX(IoWriteFifo16): jrcxz @IoWriteFifo16_Done @IoWriteFifo16_Loop: - mov word [rsi], ax + mov ax, word [rsi] out dx, ax add rsi, 2 loop @IoWriteFifo16_Loop @@ -277,7 +277,7 @@ ASM_PFX(IoWriteFifo32): jrcxz @IoWriteFifo32_Done @IoWriteFifo32_Loop: - mov dword [rsi], eax + mov eax, dword [rsi] out dx, eax add rsi, 4 loop @IoWriteFifo32_Loop -- 2.14.1.3.gb7cf6e02401b _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

