When the KVM acceleration parameter is not set, executing calc_dirty_rate with the -r or -b option results in a segmentation fault due to accessing a null kvm_state pointer in the kvm_dirty_ring_enabled function. This commit adds a check for kvm_enabled to prevent segmentation faults.
Signed-off-by: Masato Imai <m...@sfc.wide.ad.jp> --- migration/dirtyrate.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index 1d2e85746f..2a7df52519 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -799,6 +799,13 @@ void qmp_calc_dirty_rate(int64_t calc_time, * dirty ring mode only works when kvm dirty ring is enabled. * on the contrary, dirty bitmap mode is not. */ + if (!kvm_enabled() && + (mode == DIRTY_RATE_MEASURE_MODE_DIRTY_RING || + mode == DIRTY_RATE_MEASURE_MODE_DIRTY_BITMAP)) { + error_setg(errp, "mode %s requires kvm to be enabled.", + DirtyRateMeasureMode_str(mode)); + return; + } if (((mode == DIRTY_RATE_MEASURE_MODE_DIRTY_RING) && !kvm_dirty_ring_enabled()) || ((mode == DIRTY_RATE_MEASURE_MODE_DIRTY_BITMAP) && -- 2.34.1