memory leakages in driver/acpi/video.c
PATCH 1/1 memory leakages in driver/acpi/video.c
Unlike my previously patches this one is not trivial and it is not tested properly. I'm not an expert in ACPI-related questions therefore this patch may be wrong.
Len, could you please check it carefully?
acpi_video_bus_get_one_device() and other functions in driver/acpi/video.c do not release allocated memory on remove and on the error path.
Signed-off-by Vasily Averin <[email protected]>
Thank you,
Vasily Averin
SWsoft Virtuozzo/OpenVZ Linux kernel team
drivers/acpi/video.c +12 -7
@@ -1294,7 +1294,7 @@ acpi_video_bus_get_one_device(struct acp struct acpi_video_bus *video) {unsigned long device_id; -int status, result; +int status;struct acpi_video_device *data;ACPI_FUNCTION_TRACE ("acpi_video_bus_get_one_device" );
@@ -1346,8 +1346,11 @@ acpi_video_bus_get_one_device(struct acpif (ACPI_FAILURE (status)) {ACPI_DEBUG_PRINT ((ACPI_DB_ERROR ,"Error installing notify handler\n" )); - result = -ENODEV ; - goto end; +if (data->brightness) +kfree (data->brightness->levels); +kfree (data->brightness); +kfree (data); +return_VALUE (-ENODEV ); }down (&video->sem);
@@ -1358,8 +1361,6 @@ acpi_video_bus_get_one_device(struct acpreturn_VALUE (0 ); } - - end:return_VALUE (-ENOENT ); }
@@ -1643,8 +1644,9 @@ static int acpi_video_bus_put_devices(st printk(KERN_WARNING PREFIX "hhuuhhuu bug in acpi video driver.\n"); +if (data->brightness); +kfree (data->brightness->levels);kfree (data->brightness); -kfree (data); }
@@ -1785,6 +1787,10 @@ static int acpi_video_bus_add(struct acpif (ACPI_FAILURE (status)) {ACPI_DEBUG_PRINT ((ACPI_DB_ERROR ,"Error installing notify handler\n" )); +acpi_video_bus_stop_devices (video); +acpi_video_bus_put_devices (video); +kfree (video->attached_array); +acpi_video_bus_remove_fs (device); result = -ENODEV ; goto end; }
@@ -1797,7 +1803,6 @@ static int acpi_video_bus_add(struct acp end:if (result) { -acpi_video_bus_remove_fs (device);kfree (video); }