When I try to live-migrate a VM, the VirtualMachineMigration resource is rejected by the admission webhook with a nil pointer panic.
Migration CR should be created successfully.
Error from server: error when creating "../vm-migration.yaml": admission webhook "validate.virtualmachinemigration.v1alpha1.virt.virtink.smartx.com" denied the request: panic: runtime error: invalid memory address or nil pointer dereference [recovered]
2025-10-04T09:20:23.872Z ERROR admission Observed a panic {"object": {"name":"ubuntu-container-rootfs-migration-6zqkv","namespace":"kube-system"}, "namespace": "kube-system", "name": "ubuntu-container-rootfs-migration-6zqkv", "resource": {"group":"virt.virtink.smartx.com","version":"v1alpha1","resource":"virtualmachinemigrations"}, "user": "admin", "requestID": "775f660e-1f81-4fc7-8675-5c74a84b5c4a", "panic": "runtime error: invalid memory address or nil pointer dereference", "panicGoValue": "\"invalid memory address or nil pointer dereference\"", "stacktrace": "goroutine 2210 [running]:\nk8s.io/apimachinery/pkg/util/runtime.logPanic({0x1d794a0, 0xc000d37380}, {0x188c1a0, 0x2adb120})\n\t/go/pkg/mod/k8s.io/apimachinery@v0.31.3/pkg/util/runtime/runtime.go:107 +0xbc\nsigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).Handle.func1()\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.3/pkg/webhook/admission/webhook.go:163 +0x103\npanic({0x188c1a0?, 0x2adb120?})\n\t/usr/local/go/src/runtime/panic.go:785 +0x132\ngithub.com/smartxworks/virtink/pkg/controller.ValidateVMName({0x1d794a0, 0xc000d37380}, {0x0, 0x0}, {0xc0008a8920, 0xb}, {0xc0006bf290, 0x17}, 0xc000d37470)\n\t/workspace/pkg/controller/vmm_webhook.go:103 +0x198\ngithub.com/smartxworks/virtink/pkg/controller.ValidateVMMSpec({0x1d794a0, 0xc000d37380}, {0x0, 0x0}, {0xc0008a8920, 0xb}, 0xc0008f7c88, 0xc000d37440)\n\t/workspace/pkg/controller/vmm_webhook.go:90 +0x1fd\ngithub.com/smartxworks/virtink/pkg/controller.ValidateVMM({0x1d794a0, 0xc000d37380}, {0x0, 0x0}, 0xc0008f7b80, 0x8?)\n\t/workspace/pkg/controller/vmm_webhook.go:80 +0x9b\ngithub.com/smartxworks/virtink/pkg/controller.(*VMMValidator).Handle(_, {_, _}, {{{0xc00108c780, 0x24}, {{0xc0006bf158, 0x17}, {0xc0008a8838, 0x8}, {0xc0006bf170, ...}}, ...}})\n\t/workspace/pkg/controller/vmm_webhook.go:52 +0x239\nsigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).Handle(_, {_, _}, {{{0xc00108c780, 0x24}, {{0xc0006bf158, 0x17}, {0xc0008a8838, 0x8}, {0xc0006bf170, ...}}, ...}})\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.3/pkg/webhook/admission/webhook.go:181 +0x224\nsigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).ServeHTTP(0xc0009f94a0, {0x7fb856c84a78, 0xc0007918b0}, 0xc000c55040)\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.3/pkg/webhook/admission/http.go:119 +0xaf0\nsigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics.InstrumentedHook.InstrumentHandlerInFlight.func1({0x7fb856c84a78, 0xc0007918b0}, 0xc000c55040)\n\t/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:60 +0xbc\nnet/http.HandlerFunc.ServeHTTP(0x2ae1fb0?, {0x7fb856c84a78?, 0xc0007918b0?}, 0xc000e00008?)\n\t/usr/local/go/src/net/http/server.go:2220 +0x29\ngithub.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerCounter.func1({0x1d6bec0?, 0xc0003c0d20?}, 0xc000c55040)\n\t/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:147 +0xc3\nnet/http.HandlerFunc.ServeHTTP(0x40?, {0x1d6bec0?, 0xc0003c0d20?}, 0xc000e93a20?)\n\t/usr/local/go/src/net/http/server.go:2220 +0x29\ngithub.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerDuration.func2({0x1d6bec0, 0xc0003c0d20}, 0xc000c55040)\n\t/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:109 +0xc2\nnet/http.HandlerFunc.ServeHTTP(0xc0003c1420?, {0x1d6bec0?, 0xc0003c0d20?}, 0x3?)\n\t/usr/local/go/src/net/http/server.go:2220 +0x29\nnet/http.(*ServeMux).ServeHTTP(0x410845?, {0x1d6bec0, 0xc0003c0d20}, 0xc000c55040)\n\t/usr/local/go/src/net/http/server.go:2747 +0x1ca\nnet/http.serverHandler.ServeHTTP({0x1d64d90?}, {0x1d6bec0?, 0xc0003c0d20?}, 0x6?)\n\t/usr/local/go/src/net/http/server.go:3210 +0x8e\nnet/http.(*conn).serve(0xc00099cea0, {0x1d794a0, 0xc00088a240})\n\t/usr/local/go/src/net/http/server.go:2092 +0x5d0\ncreated by net/http.(*Server).Serve in goroutine 330\n\t/usr/local/go/src/net/http/server.go:3360 +0x485\n"}
runtime.sigpanic
/usr/local/go/src/runtime/signal_unix.go:917
github.com/smartxworks/virtink/pkg/controller.ValidateVMName
/workspace/pkg/controller/vmm_webhook.go:103
github.com/smartxworks/virtink/pkg/controller.ValidateVMMSpec
/workspace/pkg/controller/vmm_webhook.go:90
github.com/smartxworks/virtink/pkg/controller.ValidateVMM
/workspace/pkg/controller/vmm_webhook.go:80
github.com/smartxworks/virtink/pkg/controller.(*VMMValidator).Handle
/workspace/pkg/controller/vmm_webhook.go:52
sigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).Handle
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.3/pkg/webhook/admission/webhook.go:181
sigs.k8s.io/controller-runtime/pkg/webhook/admission.(*Webhook).ServeHTTP
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.3/pkg/webhook/admission/http.go:119
sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics.InstrumentedHook.InstrumentHandlerInFlight.func1
/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:60
net/http.HandlerFunc.ServeHTTP
/usr/local/go/src/net/http/server.go:2220
github.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerCounter.func1
/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:147
net/http.HandlerFunc.ServeHTTP
/usr/local/go/src/net/http/server.go:2220
github.com/prometheus/client_golang/prometheus/promhttp.InstrumentHandlerDuration.func2
/go/pkg/mod/github.com/prometheus/client_golang@v1.20.5/prometheus/promhttp/instrument_server.go:109
net/http.HandlerFunc.ServeHTTP
/usr/local/go/src/net/http/server.go:2220
net/http.(*ServeMux).ServeHTTP
/usr/local/go/src/net/http/server.go:2747
net/http.serverHandler.ServeHTTP
/usr/local/go/src/net/http/server.go:3210
net/http.(*conn).serve
/usr/local/go/src/net/http/server.go:2092
Description
When I try to live-migrate a VM, the VirtualMachineMigration resource is rejected by the admission webhook with a nil pointer panic.
Steps to reproduce
Expected behavior
Migration CR should be created successfully.
Actual behavior
Webhook crashes with panic:
virt-controller logs:
Environment