|
@@ -1256,6 +1256,7 @@ static void request_firmware_work_func(struct work_struct *work)
|
|
put_device(fw_work->device); /* taken in request_firmware_nowait() */
|
|
put_device(fw_work->device); /* taken in request_firmware_nowait() */
|
|
|
|
|
|
module_put(fw_work->module);
|
|
module_put(fw_work->module);
|
|
|
|
+ kfree_const(fw_work->name);
|
|
kfree(fw_work);
|
|
kfree(fw_work);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1295,7 +1296,9 @@ request_firmware_nowait(
|
|
return -ENOMEM;
|
|
return -ENOMEM;
|
|
|
|
|
|
fw_work->module = module;
|
|
fw_work->module = module;
|
|
- fw_work->name = name;
|
|
|
|
|
|
+ fw_work->name = kstrdup_const(name, gfp);
|
|
|
|
+ if (!fw_work->name)
|
|
|
|
+ return -ENOMEM;
|
|
fw_work->device = device;
|
|
fw_work->device = device;
|
|
fw_work->context = context;
|
|
fw_work->context = context;
|
|
fw_work->cont = cont;
|
|
fw_work->cont = cont;
|
|
@@ -1303,6 +1306,7 @@ request_firmware_nowait(
|
|
(uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
|
|
(uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
|
|
|
|
|
|
if (!try_module_get(module)) {
|
|
if (!try_module_get(module)) {
|
|
|
|
+ kfree_const(fw_work->name);
|
|
kfree(fw_work);
|
|
kfree(fw_work);
|
|
return -EFAULT;
|
|
return -EFAULT;
|
|
}
|
|
}
|