[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v8 04/16] microcode/amd: fix memory leak
Two buffers, '->equiv_cpu_table' and '->mpb', inside 'mc_amd' might be allocated and in the error-handing path they are not freed properly. Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> --- changes in v8: - new - it is found by reading code. No test is done. --- xen/arch/x86/microcode_amd.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/microcode_amd.c b/xen/arch/x86/microcode_amd.c index 7a854c0..afca51f 100644 --- a/xen/arch/x86/microcode_amd.c +++ b/xen/arch/x86/microcode_amd.c @@ -433,6 +433,9 @@ static int cpu_request_microcode(unsigned int cpu, const void *buf, goto out; } + mc_amd->equiv_cpu_table_size = 0; + mc_amd->equiv_cpu_table = NULL; + /* * Multiple container file support: * 1. check if this container file has equiv_cpu_id match @@ -479,6 +482,8 @@ static int cpu_request_microcode(unsigned int cpu, const void *buf, if ( error ) { + if ( mc_amd->equiv_cpu_table_size ) + xfree(mc_amd->equiv_cpu_table); xfree(mc_amd); goto out; } @@ -549,11 +554,14 @@ static int cpu_request_microcode(unsigned int cpu, const void *buf, if ( save_error ) { - xfree(mc_amd); uci->mc.mc_amd = mc_old; + mc_old = mc_amd; } - else - xfree(mc_old); + + if ( mc_old->mpb_size ) + xfree(mc_old->mpb); + xfree(mc_old->equiv_cpu_table); + xfree(mc_old); out: #if CONFIG_HVM -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |