aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/devinet.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/devinet.c')
-rw-r--r--net/ipv4/devinet.c19
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
150struct in_device *inetdev_init(struct net_device *dev) 150static 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 /*