Thread (9 messages) flat view 9 messages, 2 authors, 19d ago

Re: [PATCH v2 3/4] KVM: arm64: vgic: Tear down what vgic_init() created when it fails

From: Fuad Tabba <fuad.tabba@linux.dev>
Date: 2026-08-25 09:48:21
Also in: kvmarm, lkml

Hi Yuan,

On Tue, 25 Aug 2026 at 10:18, Yao Yuan [off-list ref] wrote:
...
quoted
diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c
index 4012df6002ea6..7493fded53acc 100644
--- a/arch/arm64/kvm/vgic/vgic-init.c
+++ b/arch/arm64/kvm/vgic/vgic-init.c
@@ -462,7 +462,7 @@ int vgic_init(struct kvm *kvm)
              if (vgic_supports_direct_irqs(kvm)) {
                      ret = vgic_v4_init(kvm);
                      if (ret)
Hi Tabba,
quoted
-                             return ret;
+                             goto out_teardown;
The vigc_v4_init already called vgic_v4_teardown() in error path,
thus I think just free dist->spis is enough yet ?
vgic_v4_init() unwinds its own state on every error return, so
vgic_v4_teardown() is a no-op there and freeing the SPI array would be
enough. I'll fold the label split in if I respin.

Thanks for the reviews!
/fuad
quoted
              }
      } else {
              ret = vgic_v5_init(kvm);
@@ -475,12 +475,19 @@ int vgic_init(struct kvm *kvm)

      ret = kvm_vgic_setup_default_irq_routing(kvm);
      if (ret)
-             return ret;
+             goto out_teardown;

      vgic_debug_init(kvm);
      dist->initialized = true;

      return 0;
+
+out_teardown:
+     vgic_v4_teardown(kvm);
+     kfree(dist->spis);
+     dist->spis = NULL;
+
+     return ret;
 }

 static void kvm_vgic_dist_destroy(struct kvm *kvm)
--
2.39.5
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help