diff options
Diffstat (limited to 'net/ipv4/devinet.c')
-rw-r--r-- | net/ipv4/devinet.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index e19734795a7b..354e800be18d 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -147,7 +147,7 @@ void in_dev_finish_destroy(struct in_device *idev) | |||
147 | } | 147 | } |
148 | } | 148 | } |
149 | 149 | ||
150 | struct in_device *inetdev_init(struct net_device *dev) | 150 | static struct in_device *inetdev_init(struct net_device *dev) |
151 | { | 151 | { |
152 | struct in_device *in_dev; | 152 | struct in_device *in_dev; |
153 | 153 | ||
@@ -405,12 +405,10 @@ static int inet_set_ifa(struct net_device *dev, struct in_ifaddr *ifa) | |||
405 | ASSERT_RTNL(); | 405 | ASSERT_RTNL(); |
406 | 406 | ||
407 | if (!in_dev) { | 407 | if (!in_dev) { |
408 | in_dev = inetdev_init(dev); | 408 | inet_free_ifa(ifa); |
409 | if (!in_dev) { | 409 | return -ENOBUFS; |
410 | inet_free_ifa(ifa); | ||
411 | return -ENOBUFS; | ||
412 | } | ||
413 | } | 410 | } |
411 | ipv4_devconf_setall(in_dev); | ||
414 | if (ifa->ifa_dev != in_dev) { | 412 | if (ifa->ifa_dev != in_dev) { |
415 | BUG_TRAP(!ifa->ifa_dev); | 413 | BUG_TRAP(!ifa->ifa_dev); |
416 | in_dev_hold(in_dev); | 414 | in_dev_hold(in_dev); |
@@ -520,13 +518,12 @@ static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh) | |||
520 | 518 | ||
521 | in_dev = __in_dev_get_rtnl(dev); | 519 | in_dev = __in_dev_get_rtnl(dev); |
522 | if (in_dev == NULL) { | 520 | if (in_dev == NULL) { |
523 | in_dev = inetdev_init(dev); | 521 | err = -ENOBUFS; |
524 | if (in_dev == NULL) { | 522 | goto errout; |
525 | err = -ENOBUFS; | ||
526 | goto errout; | ||
527 | } | ||
528 | } | 523 | } |
529 | 524 | ||
525 | ipv4_devconf_setall(in_dev); | ||
526 | |||
530 | ifa = inet_alloc_ifa(); | 527 | ifa = inet_alloc_ifa(); |
531 | if (ifa == NULL) { | 528 | if (ifa == NULL) { |
532 | /* | 529 | /* |