mirror of https://gitee.com/openkylin/linux.git
[PATCH] fix leaks in request_firmware_nowait
Wasn't checking return error and forgot to free in some case. Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
ff6ed4063d
commit
113fab1386
|
@ -526,18 +526,23 @@ request_firmware_work_func(void *arg)
|
|||
{
|
||||
struct firmware_work *fw_work = arg;
|
||||
const struct firmware *fw;
|
||||
int ret;
|
||||
if (!arg) {
|
||||
WARN_ON(1);
|
||||
return 0;
|
||||
}
|
||||
daemonize("%s/%s", "firmware", fw_work->name);
|
||||
_request_firmware(&fw, fw_work->name, fw_work->device,
|
||||
ret = _request_firmware(&fw, fw_work->name, fw_work->device,
|
||||
fw_work->hotplug);
|
||||
fw_work->cont(fw, fw_work->context);
|
||||
release_firmware(fw);
|
||||
if (ret < 0)
|
||||
fw_work->cont(NULL, fw_work->context);
|
||||
else {
|
||||
fw_work->cont(fw, fw_work->context);
|
||||
release_firmware(fw);
|
||||
}
|
||||
module_put(fw_work->module);
|
||||
kfree(fw_work);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -586,6 +591,8 @@ request_firmware_nowait(
|
|||
|
||||
if (ret < 0) {
|
||||
fw_work->cont(NULL, fw_work->context);
|
||||
module_put(fw_work->module);
|
||||
kfree(fw_work);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue