Re: [PATCH 1/2] KVM: For manual-protect GET_DIRTY_LOG, do not hold slots lock

From: Dan Carpenter

Date: Mon Oct 06 2025 - 03:33:19 EST


Hi James,

kernel test robot noticed the following build warnings:

url: https://github.com/intel-lab-lkp/linux/commits/James-Houghton/KVM-selftests-Add-parallel-KVM_GET_DIRTY_LOG-to-dirty_log_perf_test/20251001-013306
base: a6ad54137af92535cfe32e19e5f3bc1bb7dbd383
patch link: https://lore.kernel.org/r/20250930172850.598938-1-jthoughton%40google.com
patch subject: [PATCH 1/2] KVM: For manual-protect GET_DIRTY_LOG, do not hold slots lock
config: x86_64-randconfig-161-20251004 (https://download.01.org/0day-ci/archive/20251004/202510041919.LaZWBcDN-lkp@xxxxxxxxx/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
| Closes: https://lore.kernel.org/r/202510041919.LaZWBcDN-lkp@xxxxxxxxx/

New smatch warnings:
arch/x86/kvm/../../../virt/kvm/kvm_main.c:2290 kvm_get_dirty_log_protect() error: uninitialized symbol 'flush'.

vim +/flush +2290 arch/x86/kvm/../../../virt/kvm/kvm_main.c

ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2255 n = kvm_dirty_bitmap_bytes(memslot);
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2256 if (!protect) {
2a31b9db153530d virt/kvm/kvm_main.c Paolo Bonzini 2018-10-23 2257 /*
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2258 * Unlike kvm_get_dirty_log, we never flush, because no flush is
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2259 * needed until KVM_CLEAR_DIRTY_LOG. There is some code
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2260 * duplication between this function and kvm_get_dirty_log, but
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2261 * hopefully all architecture transition to
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2262 * kvm_get_dirty_log_protect and kvm_get_dirty_log can be
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2263 * eliminated.
2a31b9db153530d virt/kvm/kvm_main.c Paolo Bonzini 2018-10-23 2264 */
2a31b9db153530d virt/kvm/kvm_main.c Paolo Bonzini 2018-10-23 2265 dirty_bitmap_buffer = dirty_bitmap;
2a31b9db153530d virt/kvm/kvm_main.c Paolo Bonzini 2018-10-23 2266 } else {
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2267 bool flush;

flush needs to be initialized to false.

82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2268
03133347b4452ef virt/kvm/kvm_main.c Claudio Imbrenda 2018-04-30 2269 dirty_bitmap_buffer = kvm_second_dirty_bitmap(memslot);
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2270 memset(dirty_bitmap_buffer, 0, n);
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2271
531810caa9f4bc9 virt/kvm/kvm_main.c Ben Gardon 2021-02-02 2272 KVM_MMU_LOCK(kvm);
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2273 for (i = 0; i < n / sizeof(long); i++) {
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2274 unsigned long mask;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2275 gfn_t offset;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2276
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2277 if (!dirty_bitmap[i])
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2278 continue;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2279
0dff084607bd555 virt/kvm/kvm_main.c Sean Christopherson 2020-02-18 2280 flush = true;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2281 mask = xchg(&dirty_bitmap[i], 0);
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2282 dirty_bitmap_buffer[i] = mask;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2283
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2284 offset = i * BITS_PER_LONG;
58d2930f4ee335a virt/kvm/kvm_main.c Takuya Yoshikawa 2015-03-17 2285 kvm_arch_mmu_enable_log_dirty_pt_masked(kvm, memslot,
58d2930f4ee335a virt/kvm/kvm_main.c Takuya Yoshikawa 2015-03-17 2286 offset, mask);
58d2930f4ee335a virt/kvm/kvm_main.c Takuya Yoshikawa 2015-03-17 2287 }
531810caa9f4bc9 virt/kvm/kvm_main.c Ben Gardon 2021-02-02 2288 KVM_MMU_UNLOCK(kvm);
2a31b9db153530d virt/kvm/kvm_main.c Paolo Bonzini 2018-10-23 2289
0dff084607bd555 virt/kvm/kvm_main.c Sean Christopherson 2020-02-18 @2290 if (flush)

Either uninitialized or true. Never false.

619b5072443c05c virt/kvm/kvm_main.c David Matlack 2023-08-11 2291 kvm_flush_remote_tlbs_memslot(kvm, memslot);
82fb1294f7ad3ee virt/kvm/kvm_main.c James Houghton 2025-09-30 2292 }
0dff084607bd555 virt/kvm/kvm_main.c Sean Christopherson 2020-02-18 2293
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2294 if (copy_to_user(log->dirty_bitmap, dirty_bitmap_buffer, n))
58d6db349172786 virt/kvm/kvm_main.c Markus Elfring 2017-01-22 2295 return -EFAULT;
58d6db349172786 virt/kvm/kvm_main.c Markus Elfring 2017-01-22 2296 return 0;
ba0513b5b8ffbcb virt/kvm/kvm_main.c Mario Smarduch 2015-01-15 2297 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki