On Wed, Aug 28, 2024 at 12:44:34PM +0200, Alexey Gladkov wrote:
From: "Alexey Gladkov (Intel)" legion@kernel.org
For security reasons, access from kernel space to MMIO addresses in userspace should be restricted. All MMIO operations from kernel space are considered trusted and are not validated.
For instance, if in response to a syscall, kernel does put_user() and the target address is MMIO mapping in userspace, current #VE handler threat this access as kernel MMIO which is wrong and have security implications.
What about this:
------------------------------------8<-----------------------------------
Subject: x86/tdx: Fix "in-kernel MMIO" check
TDX only supports kernel-initiated MMIO operations. The handle_mmio() function checks if the #VE exception occurred in the kernel and rejects the operation if it did not.
However, userspace can deceive the kernel into performing MMIO on its behalf. For example, if userspace can point a syscall to an MMIO address, syscall does get_user() or put_user() on it, triggering MMIO #VE. The kernel will treat the #VE as in-kernel MMIO.
Ensure that the target MMIO address is within the kernel before decoding instruction.
------------------------------------8<-----------------------------------
And please make this patch the first in the patchset. It has to be backported to stable trees and should have zero dependencies on the rest of the patchset.