After a toolchain upgrade (I think), the x86 fix_hypercall_test started throwing warnings due to -Werror=array-bounds rightly complaining that the test is generating an out-of-bounds array access. The "obvious" fix is to replace the memcpy() with a memcmp() and compare only the exact size of the hypercall instruction. That worked, until I fiddled with the code a bit more and suddenly the test started jumping into the weeds due to gcc generating a call to the external memcmp() through the PLT, which isn't supported in the selftests. To fix that mess, which has been a pitfall for quite some time, provide implementations of memcmp(), memcpy(), and memset() to effectively override the compiler built-ins. My thought is to start with the helpers that are most likely to be used in guest code, and then add more as needed. Tested on x86 and ARM, compile tested on RISC-V and s390. Full testing on RISC-V and s390 would be welcome, the seemingly benign addition of memxxx() helpers managed to break ARM due to gcc generating an infinite loop for memset() (see patch 1 for details). Sean Christopherson (5): KVM: selftests: Implement memcmp(), memcpy(), and memset() for guest use KVM: selftests: Compare insn opcodes directly in fix_hypercall_test KVM: selftests: Remove unnecessary register shuffling in fix_hypercall_test KVM: selftests: Explicitly verify KVM doesn't patch hypercall if quirk==off KVM: selftests: Dedup subtests of fix_hypercall_test tools/testing/selftests/kvm/Makefile | 8 +- .../selftests/kvm/include/kvm_util_base.h | 10 ++ tools/testing/selftests/kvm/lib/kvm_string.c | 33 +++++ .../selftests/kvm/x86_64/fix_hypercall_test.c | 124 ++++++++---------- 4 files changed, 107 insertions(+), 68 deletions(-) create mode 100644 tools/testing/selftests/kvm/lib/kvm_string.c base-commit: 29250ba51bc1cbe8a87e923f76978b87c3247a8c -- 2.37.2.789.g6183377224-goog