Message ID | 20221004122636.61755-1-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | Deferred, archived |
Headers | show |
Series | [resend,v1,1/1] platform/x86: int3472: Don't leak reference on error | expand |
On Tue, Oct 4, 2022 at 2:26 PM Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote: > > The for_each_acpi_consumer_dev() takes a reference to the iterator > and if we break a loop we must drop that reference. This usually > happens when error handling is involved. However it's not the case > for skl_int3472_fill_clk_pdata(). > > Don't leak reference on error by dropping it properly. > > Fixes: 43cf36974d76 ("platform/x86: int3472: Support multiple clock consumers") > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > --- > > resent to include Rafael and linux-acpi@ to the Cc list > > drivers/platform/x86/intel/int3472/tps68470.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c > index f83e9c393f31..5b8d1a9620a5 100644 > --- a/drivers/platform/x86/intel/int3472/tps68470.c > +++ b/drivers/platform/x86/intel/int3472/tps68470.c > @@ -128,15 +128,15 @@ skl_int3472_fill_clk_pdata(struct device *dev, struct tps68470_clk_platform_data > for_each_acpi_consumer_dev(adev, consumer) { > sensor_name = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, > acpi_dev_name(consumer)); > - if (!sensor_name) > + if (!sensor_name) { > + acpi_dev_put(consumer); > return -ENOMEM; > + } > > (*clk_pdata)->consumers[i].consumer_dev_name = sensor_name; > i++; > } > > - acpi_dev_put(consumer); > - > return n_consumers; > } > > -- Applied, thanks!
diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c index f83e9c393f31..5b8d1a9620a5 100644 --- a/drivers/platform/x86/intel/int3472/tps68470.c +++ b/drivers/platform/x86/intel/int3472/tps68470.c @@ -128,15 +128,15 @@ skl_int3472_fill_clk_pdata(struct device *dev, struct tps68470_clk_platform_data for_each_acpi_consumer_dev(adev, consumer) { sensor_name = devm_kasprintf(dev, GFP_KERNEL, I2C_DEV_NAME_FORMAT, acpi_dev_name(consumer)); - if (!sensor_name) + if (!sensor_name) { + acpi_dev_put(consumer); return -ENOMEM; + } (*clk_pdata)->consumers[i].consumer_dev_name = sensor_name; i++; } - acpi_dev_put(consumer); - return n_consumers; }
The for_each_acpi_consumer_dev() takes a reference to the iterator and if we break a loop we must drop that reference. This usually happens when error handling is involved. However it's not the case for skl_int3472_fill_clk_pdata(). Don't leak reference on error by dropping it properly. Fixes: 43cf36974d76 ("platform/x86: int3472: Support multiple clock consumers") Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- resent to include Rafael and linux-acpi@ to the Cc list drivers/platform/x86/intel/int3472/tps68470.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)