From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 37955C3F6B0 for ; Fri, 19 Aug 2022 18:23:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350634AbiHSSXJ (ORCPT ); Fri, 19 Aug 2022 14:23:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350291AbiHSSXI (ORCPT ); Fri, 19 Aug 2022 14:23:08 -0400 Received: from mail-pf1-x44a.google.com (mail-pf1-x44a.google.com [IPv6:2607:f8b0:4864:20::44a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D3EDBCC26 for ; Fri, 19 Aug 2022 11:23:07 -0700 (PDT) Received: by mail-pf1-x44a.google.com with SMTP id cp14-20020a056a00348e00b0053632d32716so522609pfb.0 for ; Fri, 19 Aug 2022 11:23:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:mime-version:message-id:date:from:to:cc; bh=q6KGI9Syk3DETLlMjkc4p6X3oD6H1Sce59yzAdrHv9I=; b=dYp8LmBpls9sKCojA7hC8ie4GaU/vb9ZQR5d5rfmpp8r5dvZVRu2Y3IdsP0Xet8c6s Elf52OrkccDJlui4irWLDP6KPCzV8rzKzAEP/Gi/4Jdu2eOf7xH0vxDqRPXgNbeXfYx8 w+eUDBv1HC9X/6zMDOMdrWXhLX49Xs31oYUmQybGH3wZlHoxy7dI4WFHzZdDBwGJacDK mlosSMEqQuylU/LLOlNCaDpPCYsR6Y4Z4Q6hoNWaxWa8sFtBIpQ4rLmt4HpXKXhfT0PA sSveP90DLxiUTNRhKq2R0s8A4SJrSbDF5pk7sF89a77b07gzbv1ekR7sCMJU9Yd48/tN 3GPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:mime-version:message-id:date:x-gm-message-state :from:to:cc; bh=q6KGI9Syk3DETLlMjkc4p6X3oD6H1Sce59yzAdrHv9I=; b=ENwrxAKm/lQu3bLHVU8s6Rp81gy1t4C4OY3w9OX7EH1wVDAxcG2WXI2+dGONw5RwL0 H8BQk2PzIXATc1luVpxPBZ/WSblAzorn6m9H4GrIyYnaJCLn3NN557WMhT4MXIRn83WS Fish3dTDAqK1B4q+N43pN5G4NDgMLHoxET2EPbTB2M12M0Wl1HYqwDM1ysEHNxzPo5ad Pt2dIkRqXh3bSvMaKriTrltGEHkva2i65RLlU2FtlbtP0Ib7Dk1HcAiE2HOYRpsYCgdg 89zjvhnrFdQ9vxyMTqZDf+lvywuOVF3RxdQxGXAtgBFmQcLgzqagZBxJaGOt1OTld4/0 MtjQ== X-Gm-Message-State: ACgBeo2cHTTLtChOmmgBku0KXVYfqihRp2tn6MOHGPjTHuH+Qqc4Q3xA Iyc+2lgq2THoVDjUtc5HGcviMGV5Gd2j X-Google-Smtp-Source: AA6agR5BnOtXR7mbS2J4iyctv5Xrw2jkTvIDPsI52C3aKVCk8ttOa2n1F9D2pvLo9CAnflh0Gv0AuIvqMW5y X-Received: from vipin.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:479f]) (user=vipinsh job=sendgmr) by 2002:a05:6a00:f92:b0:535:e39c:a6b4 with SMTP id ct18-20020a056a000f9200b00535e39ca6b4mr7429055pfb.46.1660933387036; Fri, 19 Aug 2022 11:23:07 -0700 (PDT) Date: Fri, 19 Aug 2022 11:22:58 -0700 Message-Id: <20220819182258.588335-1-vipinsh@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.37.1.595.g718a3a8f04-goog Subject: [PATCH] KVM: x86: Fix mce_banks memory leak on mci_ctl2_banks allocation failure From: Vipin Sharma To: seanjc@google.com, pbonzini@redhat.com, jmattson@google.com Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Vipin Sharma Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If mci_ctl2_banks allocation fails, kvm goes to fail_free_pio_data and forgets about freeing mce_banks memory causing memory leak. Individually check memory allocation status and free memory in the correct order. Fixes: 281b52780b57 ("KVM: x86: Add emulation for MSR_IA32_MCx_CTL2 MSRs.") Signed-off-by: Vipin Sharma --- arch/x86/kvm/x86.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index d7374d768296..4b2c7a4f175f 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -11560,15 +11560,19 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) vcpu->arch.mce_banks = kcalloc(KVM_MAX_MCE_BANKS * 4, sizeof(u64), GFP_KERNEL_ACCOUNT); + if (!vcpu->arch.mce_banks) + goto fail_free_pio_data; + vcpu->arch.mci_ctl2_banks = kcalloc(KVM_MAX_MCE_BANKS, sizeof(u64), GFP_KERNEL_ACCOUNT); - if (!vcpu->arch.mce_banks || !vcpu->arch.mci_ctl2_banks) - goto fail_free_pio_data; + if (!vcpu->arch.mci_ctl2_banks) + goto fail_free_mce_banks; + vcpu->arch.mcg_cap = KVM_MAX_MCE_BANKS; if (!zalloc_cpumask_var(&vcpu->arch.wbinvd_dirty_mask, GFP_KERNEL_ACCOUNT)) - goto fail_free_mce_banks; + goto fail_free_mci_ctl2_banks; if (!alloc_emulate_ctxt(vcpu)) goto free_wbinvd_dirty_mask; @@ -11614,9 +11618,10 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) kmem_cache_free(x86_emulator_cache, vcpu->arch.emulate_ctxt); free_wbinvd_dirty_mask: free_cpumask_var(vcpu->arch.wbinvd_dirty_mask); +fail_free_mci_ctl2_banks: + kfree(vcpu->arch.mci_ctl2_banks); fail_free_mce_banks: kfree(vcpu->arch.mce_banks); - kfree(vcpu->arch.mci_ctl2_banks); fail_free_pio_data: free_page((unsigned long)vcpu->arch.pio_data); fail_free_lapic: -- 2.37.1.595.g718a3a8f04-goog