On 1/10/25 1:22 AM, Shuai Xue wrote: > Memory allocated for groups is not freed if an error occurs during > idxd_setup_groups(). To fix it, free the allocated memory in the reverse > order of allocation before exiting the function in case of an error. > > Signed-off-by: Shuai Xue <xueshuai@xxxxxxxxxxxxxxxxx> Reviewed-by: Dave Jiang <dave.jiang@xxxxxxxxx> > --- > drivers/dma/idxd/init.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/dma/idxd/init.c b/drivers/dma/idxd/init.c > index 12df895dcbe9..04a7d7706e53 100644 > --- a/drivers/dma/idxd/init.c > +++ b/drivers/dma/idxd/init.c > @@ -326,6 +326,7 @@ static int idxd_setup_groups(struct idxd_device *idxd) > rc = dev_set_name(conf_dev, "group%d.%d", idxd->id, group->id); > if (rc < 0) { > put_device(conf_dev); > + kfree(group); > goto err; > } > > @@ -350,7 +351,10 @@ static int idxd_setup_groups(struct idxd_device *idxd) > while (--i >= 0) { > group = idxd->groups[i]; > put_device(group_confdev(group)); > + kfree(group); > } > + kfree(idxd->groups); > + > return rc; > } >