diff options
author | Jeff Garzik <jgarzik@redhat.com> | 2007-10-23 23:19:37 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-24 00:27:50 -0400 |
commit | bada339ba24dee9e143bfb42e1dc61f146619846 (patch) | |
tree | 69e14af15764a1b38d61cd1f0b55560e45779f23 /net/core/dev.c | |
parent | c9927c2bf4f45bb85e8b502ab3fb79ad6483c244 (diff) |
[NET]: Validate device addr prior to interface-up
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 872658927e47..f861555cc525 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1007,17 +1007,20 @@ int dev_open(struct net_device *dev) | |||
1007 | * Call device private open method | 1007 | * Call device private open method |
1008 | */ | 1008 | */ |
1009 | set_bit(__LINK_STATE_START, &dev->state); | 1009 | set_bit(__LINK_STATE_START, &dev->state); |
1010 | if (dev->open) { | 1010 | |
1011 | if (dev->validate_addr) | ||
1012 | ret = dev->validate_addr(dev); | ||
1013 | |||
1014 | if (!ret && dev->open) | ||
1011 | ret = dev->open(dev); | 1015 | ret = dev->open(dev); |
1012 | if (ret) | ||
1013 | clear_bit(__LINK_STATE_START, &dev->state); | ||
1014 | } | ||
1015 | 1016 | ||
1016 | /* | 1017 | /* |
1017 | * If it went open OK then: | 1018 | * If it went open OK then: |
1018 | */ | 1019 | */ |
1019 | 1020 | ||
1020 | if (!ret) { | 1021 | if (ret) |
1022 | clear_bit(__LINK_STATE_START, &dev->state); | ||
1023 | else { | ||
1021 | /* | 1024 | /* |
1022 | * Set the flags. | 1025 | * Set the flags. |
1023 | */ | 1026 | */ |
@@ -1038,6 +1041,7 @@ int dev_open(struct net_device *dev) | |||
1038 | */ | 1041 | */ |
1039 | call_netdevice_notifiers(NETDEV_UP, dev); | 1042 | call_netdevice_notifiers(NETDEV_UP, dev); |
1040 | } | 1043 | } |
1044 | |||
1041 | return ret; | 1045 | return ret; |
1042 | } | 1046 | } |
1043 | 1047 | ||