lkml.org 
[lkml]   [2020]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v2] KVM: SVM: Fix potential memory leak in svm_cpu_init()
    From
    Date
    On 04/01/20 09:56, linmiaohe wrote:
    > From: Miaohe Lin <linmiaohe@huawei.com>
    >
    > When kmalloc memory for sd->sev_vmcbs failed, we forget to free the page
    > held by sd->save_area. Also get rid of the var r as '-ENOMEM' is actually
    > the only possible outcome here.
    >
    > Reviewed-by: Liran Alon <liran.alon@oracle.com>
    > Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    > Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    > ---
    > -v2:
    > drop var r as suggested by Vitaly
    > ---
    > arch/x86/kvm/svm.c | 13 ++++++-------
    > 1 file changed, 6 insertions(+), 7 deletions(-)
    >
    > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    > index 8f1b715dfde8..5f9d6547e0e7 100644
    > --- a/arch/x86/kvm/svm.c
    > +++ b/arch/x86/kvm/svm.c
    > @@ -1003,33 +1003,32 @@ static void svm_cpu_uninit(int cpu)
    > static int svm_cpu_init(int cpu)
    > {
    > struct svm_cpu_data *sd;
    > - int r;
    >
    > sd = kzalloc(sizeof(struct svm_cpu_data), GFP_KERNEL);
    > if (!sd)
    > return -ENOMEM;
    > sd->cpu = cpu;
    > - r = -ENOMEM;
    > sd->save_area = alloc_page(GFP_KERNEL);
    > if (!sd->save_area)
    > - goto err_1;
    > + goto free_cpu_data;
    >
    > if (svm_sev_enabled()) {
    > - r = -ENOMEM;
    > sd->sev_vmcbs = kmalloc_array(max_sev_asid + 1,
    > sizeof(void *),
    > GFP_KERNEL);
    > if (!sd->sev_vmcbs)
    > - goto err_1;
    > + goto free_save_area;
    > }
    >
    > per_cpu(svm_data, cpu) = sd;
    >
    > return 0;
    >
    > -err_1:
    > +free_save_area:
    > + __free_page(sd->save_area);
    > +free_cpu_data:
    > kfree(sd);
    > - return r;
    > + return -ENOMEM;
    >
    > }
    >
    >

    Queued, thanks.

    Paolo

    \
     
     \ /
      Last update: 2020-01-15 19:25    [W:4.915 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site