Commit c759bc8e authored by Joe Hattori's avatar Joe Hattori Committed by Rafael J. Wysocki
Browse files

ACPI: fan: cleanup resources in the error path of .probe()



Call thermal_cooling_device_unregister() and sysfs_remove_link() in the
error path of acpi_fan_probe() to fix possible memory leak.

This bug was found by an experimental static analysis tool that I am
developing.

Fixes: 05a83d97 ("ACPI: register ACPI Fan as generic thermal cooling device")
Signed-off-by: default avatarJoe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Link: https://patch.msgid.link/20241211032812.210164-1-joe@pf.is.s.u-tokyo.ac.jp


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 78d4f34e
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -371,19 +371,25 @@ static int acpi_fan_probe(struct platform_device *pdev)
	result = sysfs_create_link(&pdev->dev.kobj,
				   &cdev->device.kobj,
				   "thermal_cooling");
	if (result)
	if (result) {
		dev_err(&pdev->dev, "Failed to create sysfs link 'thermal_cooling'\n");
		goto err_unregister;
	}

	result = sysfs_create_link(&cdev->device.kobj,
				   &pdev->dev.kobj,
				   "device");
	if (result) {
		dev_err(&pdev->dev, "Failed to create sysfs link 'device'\n");
		goto err_end;
		goto err_remove_link;
	}

	return 0;

err_remove_link:
	sysfs_remove_link(&pdev->dev.kobj, "thermal_cooling");
err_unregister:
	thermal_cooling_device_unregister(cdev);
err_end:
	if (fan->acpi4)
		acpi_fan_delete_attributes(device);