KVM: PPC: Book3S HV: XIVE: fix rollback when kvmppc_xive_create fails
authorCédric Le Goater <clg@kaod.org>
Thu, 18 Jul 2019 21:51:54 +0000 (23:51 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 19 Jul 2019 03:41:12 +0000 (13:41 +1000)
The XIVE device structure is now allocated in kvmppc_xive_get_device()
and kfree'd in kvmppc_core_destroy_vm(). In case of an OPAL error when
allocating the XIVE VPs, the kfree() call in kvmppc_xive_*create()
will result in a double free and corrupt the host memory.

Fixes: 5422e95103cf ("KVM: PPC: Book3S HV: XIVE: Replace the 'destroy' method by a 'release' method")
Cc: stable@vger.kernel.org # v5.2+
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Tested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/6ea6998b-a890-2511-01d1-747d7621eb19@kaod.org
arch/powerpc/kvm/book3s_xive.c
arch/powerpc/kvm/book3s_xive_native.c

index 6ca0d7376a9f8ec1e2aa72aa8f2744e61c9732cb..e3ba67095895ab35c721b46675a8380fb073e01e 100644 (file)
@@ -1986,10 +1986,8 @@ static int kvmppc_xive_create(struct kvm_device *dev, u32 type)
 
        xive->single_escalation = xive_native_has_single_escalation();
 
-       if (ret) {
-               kfree(xive);
+       if (ret)
                return ret;
-       }
 
        return 0;
 }
index 5596c8ec221ac627a7e948feb8c9b422006b793d..a998823f68a322cf1b9400d9f2b7efdf916e92b6 100644 (file)
@@ -1090,9 +1090,9 @@ static int kvmppc_xive_native_create(struct kvm_device *dev, u32 type)
        xive->ops = &kvmppc_xive_native_ops;
 
        if (ret)
-               kfree(xive);
+               return ret;
 
-       return ret;
+       return 0;
 }
 
 /*