On Fri, Aug 09, 2019 at 11:44:45AM +0000, Bernard Metzler wrote: > -----"Dan Carpenter" <dan.carpenter@xxxxxxxxxx> wrote: ----- > > >To: "Bernard Metzler" <bmt@xxxxxxxxxxxxxx> > >From: "Dan Carpenter" <dan.carpenter@xxxxxxxxxx> > >Date: 08/09/2019 12:16PM > >Cc: "Doug Ledford" <dledford@xxxxxxxxxx>, "Jason Gunthorpe" > ><jgg@xxxxxxxx>, linux-rdma@xxxxxxxxxxxxxxx, > >kernel-janitors@xxxxxxxxxxxxxxx > >Subject: [EXTERNAL] [PATCH] RDMA/siw: Fix a memory leak in > >siw_init_cpulist() > > > >The error handling code doesn't free siw_cpu_info.tx_valid_cpus[0]. > >The > >first iteration through the loop is a no-op so this is sort of an off > >by > >one bug. > > > >Fixes: bdcf26bf9b3a ("rdma/siw: network and RDMA core interface") > >Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> > >--- > > drivers/infiniband/sw/siw/siw_main.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > >diff --git a/drivers/infiniband/sw/siw/siw_main.c > >b/drivers/infiniband/sw/siw/siw_main.c > >index d0f140daf659..95ace3967391 100644 > >--- a/drivers/infiniband/sw/siw/siw_main.c > >+++ b/drivers/infiniband/sw/siw/siw_main.c > >@@ -160,9 +160,9 @@ static int siw_init_cpulist(void) > > > > out_err: > > siw_cpu_info.num_nodes = 0; > >- while (i) { > >+ while (--i >= 0) { > > kfree(siw_cpu_info.tx_valid_cpus[i]); > >- siw_cpu_info.tx_valid_cpus[i--] = NULL; > >+ siw_cpu_info.tx_valid_cpus[i] = NULL; > > } > > kfree(siw_cpu_info.tx_valid_cpus); > > siw_cpu_info.tx_valid_cpus = NULL; > >-- > >2.20.1 > > > > > Dan, many thanks for catching this one! > > I suggest you provide an even simpler fix, taking the > chance to remove the redundant > "siw_cpu_info.tx_valid_cpus[i] = NULL;" line (since > the whole structure gets kfree'd a line further > down...). > This shall be suffcient: > > - while (i) { > + while (--i >= 0) > kfree(siw_cpu_info.tx_valid_cpus[i]); > - siw_cpu_info.tx_valid_cpus[i--] = NULL; Yeah that's a good point. I'll resend. regards, dan carpenter