• Zenghui Yu's avatar
    KVM: selftests: Fix mapping length truncation in m{,un}map() · 309505dd
    Zenghui Yu authored
    max_mem_slots is now declared as uint32_t. The result of (0x200000 * 32767)
    is unexpectedly truncated to be 0xffe00000, whilst we actually need to
    allocate about, 63GB. Cast max_mem_slots to size_t in both mmap() and
    munmap() to fix the length truncation.
    
    We'll otherwise see the failure on arm64 thanks to the access_ok() checking
    in __kvm_set_memory_region(), as the unmapped VA happen to go beyond the
    task's allowed address space.
    
     # ./set_memory_region_test
    Allowed number of memory slots: 32767
    Adding slots 0..32766, each memory region with 2048K size
    ==== Test Assertion Failure ====
      set_memory_region_test.c:391: ret == 0
      pid=94861 tid=94861 errno=22 - Invalid argument
         1	0x00000000004015a7: test_add_max_memory_regions at set_memory_region_test.c:389
         2	 (inlined by) main at set_memory_region_test.c:426
         3	0x0000ffffb8e67bdf: ?? ??:0
         4	0x00000000004016db: _start at :?
      KVM_SET_USER_MEMORY_REGION IOCTL failed,
      rc: -1 errno: 22 slot: 2615
    
    Fixes: 3bf0fcd7 ("KVM: selftests: Speed up set_memory_region_test")
    Signed-off-by: default avatarZenghui Yu <yuzenghui@huawei.com>
    Message-Id: <20210624070931.565-1-yuzenghui@huawei.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    309505dd
set_memory_region_test.c 11.3 KB