summaryrefslogtreecommitdiff
path: root/extdev.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2021-09-27 18:56:21 +0200
committerFelix Fietkau <nbd@nbd.name>2021-09-27 18:58:01 +0200
commit5a4ac30c7a15712d01110befec1acfe86c2cbed0 (patch)
treead52b0310a781078efb9b016fbe80d89ca50001d /extdev.c
parent08e954e137ffcf7770200bbd6476dc36bbd326f5 (diff)
downloadnetifd-5a4ac30c7a15712d01110befec1acfe86c2cbed0.tar.gz
netifd: rework/fix device free handling
Instead of explicitly preventing free in specific code sections using device_lock/device_unlock, defer all device free handling via uloop timeout This avoids an entire class of lurking use-after-free bugs triggered by device event processing and simplifies the code Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'extdev.c')
-rw-r--r--extdev.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/extdev.c b/extdev.c
index 977d9c2..5c5e769 100644
--- a/extdev.c
+++ b/extdev.c
@@ -942,11 +942,9 @@ __create(const char *name, struct device_type *type, struct blob_attr *config)
inv_error:
extdev_invocation_error(ret, __extdev_methods[METHOD_CREATE], name);
error:
- device_lock();
free(edev->dev.config);
device_cleanup(&edev->dev);
free(edev);
- device_unlock();
netifd_log_message(L_WARNING, "Failed to create %s %s\n", type->name, name);
return NULL;
}