[PATCH] KVM: selftests: Compare the entire XSAVE buffer in the SEV smoke test

Gokul K <[email protected]>
Newsgroups org.kernel.vger.linux-kselftest,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
compare_xsave() stops at index 4094, so the last byte of the XSAVE state
is never compared.  Both buffers handed to it are 4096 bytes: the host
copy is a struct kvm_xsave, whose region[] member is 1024 u32s, and the
guest copy is the PAGE_SIZE shared page that guest_code_xsave() runs
XSAVE into.  A VMSA synchronization bug that corrupted only that final
byte would go unreported and the test would still pass.

Bound the loop with sizeof(struct kvm_xsave) rather than an open-coded
length, and make the index unsigned so it does not mix signedness with
sizeof.

Fixes: 8c53183dbaa2 ("selftests: kvm: add test for transferring FPU state into VMSA")
Signed-off-by: Gokul K <[email protected]>
---
 tools/testing/selftests/kvm/x86/sev_smoke_test.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/kvm/x86/sev_smoke_test.c b/tools/testing/selftests/kvm/x86/sev_smoke_test.c
index 6b2cbe2a90b7..c7af27954356 100644
--- a/tools/testing/selftests/kvm/x86/sev_smoke_test.c
+++ b/tools/testing/selftests/kvm/x86/sev_smoke_test.c
@@ -90,9 +90,10 @@ asm("guest_code_xsave:\n"
 
 static void compare_xsave(u8 *from_host, u8 *from_guest)
 {
-	int i;
+	unsigned int i;
 	bool bad = false;
-	for (i = 0; i < 4095; i++) {
+
+	for (i = 0; i < sizeof(struct kvm_xsave); i++) {
 		if (from_host[i] != from_guest[i]) {
 			printf("mismatch at %u | %02hhx %02hhx\n",
 			       i, from_host[i], from_guest[i]);
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.