diff options
| author | Zack Rusin <zack.rusin@broadcom.com> | 2026-09-03 12:07:20 -0400 |
|---|---|---|
| committer | Borislav Petkov (AMD) <bp@alien8.de> | 2026-11-02 13:51:17 -0800 |
| commit | e0e022004bbedc7caf1c18770980eb5372019189 (patch) | |
| tree | 917803e7ea7576f13b7fca5987236c0d98c1de4d /scripts/Makefile.thinlto | |
| parent | f01a394fe2a00d3cb4cf2cda279c58604a2540ad (diff) | |
| download | linux-next-e0e022004bbedc7caf1c18770980eb5372019189.tar.gz linux-next-e0e022004bbedc7caf1c18770980eb5372019189.zip | |
x86/vmware: Fix i386 high-bandwidth hypercall arguments
The high-bandwidth hypercall helpers push %ebp before loading the in6
operand into it. On i386 without frame pointers, both GCC and Clang can
address the memory-constrained operand relative to %esp. The push then
moves the stack and the helpers load the wrong value.
Typical i386 configurations use the frame-pointer unwinder and happen to
address the operand through %ebp. However, UNWINDER_GUESS is available
with EXPERT and permits the affected frame-pointer-disabled configuration.
vmwgfx is also available on i386 and calls both helpers.
Stage in6 through %eax before changing either stack register, then save
%ebp and copy the staged value into it. Load the VMware magic immediately
before the string I/O instruction. Mark %eax early-clobber so it cannot
also provide in6 or an address register for it. Use the same sequence on
x86-64, where the full-width register preserves in6.
Fixes: 34bf25e820ae ("x86/vmware: Introduce VMware hypercall API")
Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com>
Cc: stable@vger.kernel.org # 6.11+
Link: https://patch.msgid.link/4ab10678a8f50053934b62b56af81f881c1d3798.1788414669.git.zack.rusin@broadcom.com
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
