interface-ip: Fix possbile segfaults
[project/netifd.git] / device.c
index a29c981..65183f3 100644 (file)
--- a/device.c
+++ b/device.c
@@ -174,7 +174,7 @@ device_merge_settings(struct device *dev, struct device_settings *n)
                s->dadtransmits : os->dadtransmits;
        n->multicast_to_unicast = s->multicast_to_unicast;
        n->multicast_router = s->multicast_router;
-       n->flags = s->flags | os->flags;
+       n->flags = s->flags | os->flags | os->valid_flags;
 }
 
 void
@@ -337,6 +337,8 @@ int device_claim(struct device_user *dep)
                device_set_ifindex(dev, system_if_resolve(dev));
                if (!dev->ifindex)
                        ret = -1;
+
+               system_if_get_settings(dev, &dev->orig_settings);
        } else
                ret = dev->set_state(dev, true);
 
@@ -427,6 +429,9 @@ device_create_default(const char *name, bool external)
 
        D(DEVICE, "Create simple device '%s'\n", name);
        dev = calloc(1, sizeof(*dev));
+       if (!dev)
+               return NULL;
+
        dev->external = external;
        dev->set_state = simple_device_set_state;
        device_init(dev, &simple_device_type, name);