]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/tdx: Fix data leak in mmio_read()
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Mon, 26 Aug 2024 12:53:04 +0000 (15:53 +0300)
committerDave Hansen <dave.hansen@linux.intel.com>
Mon, 26 Aug 2024 19:45:19 +0000 (12:45 -0700)
The mmio_read() function makes a TDVMCALL to retrieve MMIO data for an
address from the VMM.

Sean noticed that mmio_read() unintentionally exposes the value of an
initialized variable (val) on the stack to the VMM.

This variable is only needed as an output value. It did not need to be
passed to the VMM in the first place.

Do not send the original value of *val to the VMM.

[ dhansen: clarify what 'val' is used for. ]

Fixes: 31d58c4e557d ("x86/tdx: Handle in-kernel MMIO")
Reported-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc:stable@vger.kernel.org
Link: https://lore.kernel.org/all/20240826125304.1566719-1-kirill.shutemov%40linux.intel.com
arch/x86/coco/tdx/tdx.c

index 078e2bac25531bf905dba1b91562affb460d6c46..da8b66dce0da5f614f217c3d5d9bbe978e458ceb 100644 (file)
@@ -389,7 +389,6 @@ static bool mmio_read(int size, unsigned long addr, unsigned long *val)
                .r12 = size,
                .r13 = EPT_READ,
                .r14 = addr,
-               .r15 = *val,
        };
 
        if (__tdx_hypercall(&args))