Commit 4df4b7cd authored by Claudio Imbrenda's avatar Claudio Imbrenda
Browse files

KVM: s390: Fix leaking kvm_s390_mmu_cache in case of errors



Fix a memory leak that can happen if gmap_ucas_map_one() or
kvm_s390_mmu_cache_topup() return error values.

Also fix a similar issue in gmap_set_limit().

Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Fixes: a2c17f92 ("KVM: s390: New gmap code")
Reported-by: default avatarJiaxin Fan <jiaxin.fan@ibm.com>
Reviewed-by: default avatarChristian Borntraeger <borntraeger@linux.ibm.com>
Signed-off-by: default avatarChristian Borntraeger <borntraeger@linux.ibm.com>
parent d0f2eb44
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ struct gmap *gmap_new_child(struct gmap *parent, gfn_t limit)

int gmap_set_limit(struct gmap *gmap, gfn_t limit)
{
	struct kvm_s390_mmu_cache *mc;
	struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) = NULL;
	int rc, type;

	type = gmap_limit_to_type(limit);
@@ -142,7 +142,6 @@ int gmap_set_limit(struct gmap *gmap, gfn_t limit)
			rc = dat_set_asce_limit(mc, &gmap->asce, type);
	} while (rc == -ENOMEM);

	kvm_s390_free_mmu_cache(mc);
	return 0;
}

@@ -822,8 +821,8 @@ int gmap_ucas_translate(struct kvm_s390_mmu_cache *mc, struct gmap *gmap, gpa_t

int gmap_ucas_map(struct gmap *gmap, gfn_t p_gfn, gfn_t c_gfn, unsigned long count)
{
	struct kvm_s390_mmu_cache *mc;
	int rc;
	struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) = NULL;
	int rc = 0;

	mc = kvm_s390_new_mmu_cache();
	if (!mc)