Message ID | 1670463165-20589-1-git-send-email-wangyufen@huawei.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | powerpc/pseries: fix potential memory leak in init_cpu_associativity() | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 24 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 6 jobs. |
Wang Yufen wrote: > If the vcpu_associativity alloc memory successfully but the > pcpu_associativity fails to alloc memory, the vcpu_associativity > memory leaks. > > Fixes: d62c8deeb6e6 ("powerpc/pseries: Provide vcpu dispatch statistics") > Signed-off-by: Wang Yufen <wangyufen@huawei.com> > --- > arch/powerpc/platforms/pseries/lpar.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c > index 97ef649..501ee6c 100644 > --- a/arch/powerpc/platforms/pseries/lpar.c > +++ b/arch/powerpc/platforms/pseries/lpar.c > @@ -211,6 +211,7 @@ static int init_cpu_associativity(void) > > if (!vcpu_associativity || !pcpu_associativity) { > pr_err("error allocating memory for associativity information\n"); > + kfree(vcpu_associativity); I think we should call destroy_cpu_associativity() here instead. We don't know which allocation failed, so it is better to try and free both, and also to reset the pointers to 0. - Naveen
在 2022/12/13 14:06, Naveen N. Rao 写道: > Wang Yufen wrote: >> If the vcpu_associativity alloc memory successfully but the >> pcpu_associativity fails to alloc memory, the vcpu_associativity >> memory leaks. >> >> Fixes: d62c8deeb6e6 ("powerpc/pseries: Provide vcpu dispatch statistics") >> Signed-off-by: Wang Yufen <wangyufen@huawei.com> >> --- >> arch/powerpc/platforms/pseries/lpar.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/arch/powerpc/platforms/pseries/lpar.c >> b/arch/powerpc/platforms/pseries/lpar.c >> index 97ef649..501ee6c 100644 >> --- a/arch/powerpc/platforms/pseries/lpar.c >> +++ b/arch/powerpc/platforms/pseries/lpar.c >> @@ -211,6 +211,7 @@ static int init_cpu_associativity(void) >> >> if (!vcpu_associativity || !pcpu_associativity) { >> pr_err("error allocating memory for associativity >> information\n"); >> + kfree(vcpu_associativity); > > I think we should call destroy_cpu_associativity() here instead. We > don't know which allocation failed, so it is better to try and free > both, and also to reset the pointers to 0. Hi, Okay, I'll send a v2 with the following modifications: --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c @@ -524,8 +524,10 @@ static ssize_t vcpudispatch_stats_write(struct file *file, const char __user *p, if (cmd) { rc = init_cpu_associativity(); - if (rc) + if (rc) { + destroy_cpu_associativity(); goto out; + } for_each_possible_cpu(cpu) { disp = per_cpu_ptr(&vcpu_disp_data, cpu); Thanks, Wang > > > - Naveen > >
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c index 97ef649..501ee6c 100644 --- a/arch/powerpc/platforms/pseries/lpar.c +++ b/arch/powerpc/platforms/pseries/lpar.c @@ -211,6 +211,7 @@ static int init_cpu_associativity(void) if (!vcpu_associativity || !pcpu_associativity) { pr_err("error allocating memory for associativity information\n"); + kfree(vcpu_associativity); return -ENOMEM; }
If the vcpu_associativity alloc memory successfully but the pcpu_associativity fails to alloc memory, the vcpu_associativity memory leaks. Fixes: d62c8deeb6e6 ("powerpc/pseries: Provide vcpu dispatch statistics") Signed-off-by: Wang Yufen <wangyufen@huawei.com> --- arch/powerpc/platforms/pseries/lpar.c | 1 + 1 file changed, 1 insertion(+)