migration wrong handling of KVM_GET_DIRTY_LOG ioctl In the code below kvm_vm_ioctl(...) can return --errno != -1 from ioctl call, but return only checks for -1. Found during KVM-ARM migration which apperead to go through but was actually failing getting memslot dirty bitmap. static int kvm_physical_sync_dirty_bitmap(....) { .... if(kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) { - err out } ... continue } Sent patch for error handling: http://lists.nongnu.org/archive/html/qemu-devel/2014-09/msg05633.html The apparently obvious fix was applied as commit b533f658a98325d0e4 but then reverted in commit 50212d6346f33d6e19, because not all errno returns from this ioctl should be treated as errors. That commit message said "Revert that patch instead of fixing it properly this late in the release process. I disagree with this approach, but let's make things move _somewhere_, instead of arguing endlessly whch of the 2 proposed fixes is better." -- and then we never did a proper fix, so 5 years later we're still making an incorrect == -1 check... Moving this bug back to Confirmed to move it out of "In progress" state. We still check for only -1 upstream. Yet another try to fix this issue: https://lists.gnu.org/archive/html/qemu-devel/2021-01/msg07557.html Patch has been merged here: https://gitlab.com/qemu-project/qemu/-/commit/38e0b7904eca7cd32