* [PATCH] request_firmware: avoid race conditions
@ 2005-06-24 20:56 Stanislaw W. Gruszka
0 siblings, 0 replies; only message in thread
From: Stanislaw W. Gruszka @ 2005-06-24 20:56 UTC (permalink / raw)
To: linux-kernel
Avoid race occurs when some process have open file descriptor for class
device attributes and already firmware allocated memory are freed.
Don't allow negative loading timeout.
Signed-off-by: Stanislaw W. Gruszka <stf_xl@wp.pl>
diff -up linux-2.6.12/drivers/base/firmware_class.c{-orig,}
--- linux/drivers/base/firmware_class.c-orig 2005-06-23 12:12:04.000000000 +0200
+++ linux/drivers/base/firmware_class.c 2005-06-24 17:01:55.000000000 +0200
@@ -74,6 +74,8 @@ static ssize_t
firmware_timeout_store(struct class *class, const char *buf, size_t count)
{
loading_timeout = simple_strtol(buf, NULL, 10);
+ if (loading_timeout < 0)
+ loading_timeout = 0;
return count;
}
@@ -138,6 +140,10 @@ firmware_loading_store(struct class_devi
switch (loading) {
case 1:
down(&fw_lock);
+ if (!fw_priv->fw) {
+ up(&fw_lock);
+ break;
+ }
vfree(fw_priv->fw->data);
fw_priv->fw->data = NULL;
fw_priv->fw->size = 0;
@@ -178,7 +184,7 @@ firmware_data_read(struct kobject *kobj,
down(&fw_lock);
fw = fw_priv->fw;
- if (test_bit(FW_STATUS_DONE, &fw_priv->status)) {
+ if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
ret_count = -ENODEV;
goto out;
}
@@ -238,9 +244,10 @@ firmware_data_write(struct kobject *kobj
if (!capable(CAP_SYS_RAWIO))
return -EPERM;
+
down(&fw_lock);
fw = fw_priv->fw;
- if (test_bit(FW_STATUS_DONE, &fw_priv->status)) {
+ if (!fw || test_bit(FW_STATUS_DONE, &fw_priv->status)) {
retval = -ENODEV;
goto out;
}
@@ -418,7 +425,7 @@ request_firmware(const struct firmware *
fw_priv = class_get_devdata(class_dev);
- if (loading_timeout) {
+ if (loading_timeout > 0) {
fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
add_timer(&fw_priv->timeout);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-06-24 21:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-06-24 20:56 [PATCH] request_firmware: avoid race conditions Stanislaw W. Gruszka
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox