From c8a5f1ae361ab61192be6085c29d977eb73a05f5 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 11 Aug 2016 19:36:09 +0200 Subject: Prevent premature device free in interface_claim_device interface_set_device_config can trigger a device free (for example if the device is here only present in a bridge), which renders dev invalid and leads to segfault. Add a lock to prevent this and clean-up the code for readability. Signed-off-by: Gino Peeters Signed-off-by: Hans Dedecker Signed-off-by: Felix Fietkau --- interface.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'interface.c') diff --git a/interface.c b/interface.c index 0b9893c..71e2ecc 100644 --- a/interface.c +++ b/interface.c @@ -586,6 +586,8 @@ interface_claim_device(struct interface *iface) if (iface->parent_iface.iface) interface_remove_user(&iface->parent_iface); + device_lock(); + if (iface->parent_ifname) { parent = vlist_find(&interfaces, iface->parent_ifname, parent, node); iface->parent_iface.cb = interface_alias_cb; @@ -601,6 +603,8 @@ interface_claim_device(struct interface *iface) if (dev) interface_set_main_dev(iface, dev); + device_unlock(); + if (iface->proto_handler->flags & PROTO_FLAG_INIT_AVAILABLE) interface_set_available(iface, true); } -- cgit v1.2.3