]> git.hungrycats.org Git - linux/commitdiff
[IPV6]: Fix device handling in ip6_route_add().
authorHideaki Yoshifuji <yoshfuji@linux-ipv6.org>
Tue, 24 Aug 2004 04:21:01 +0000 (21:21 -0700)
committerHideaki Yoshifuji <yoshfuji@linux-ipv6.org>
Tue, 24 Aug 2004 04:21:01 +0000 (21:21 -0700)
Signed-off-by: HIDEAKI Yoshifuji <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@redhat.com>
net/ipv6/route.c

index 77e9de707e9601995c581992e89fc68ee7a80753..8caef0ce9ae6032ff6abe947a8ef32f9997f8d0e 100644 (file)
@@ -820,9 +820,12 @@ int ip6_route_add(struct in6_rtmsg *rtmsg, struct nlmsghdr *nlh, void *_rtattr)
         */
        if ((rtmsg->rtmsg_flags&RTF_REJECT) ||
            (dev && (dev->flags&IFF_LOOPBACK) && !(addr_type&IPV6_ADDR_LOOPBACK))) {
-               if (dev && dev != &loopback_dev) {
-                       dev_put(dev);
-                       in6_dev_put(idev);
+               /* hold loopback dev/idev if we haven't done so. */
+               if (dev != &loopback_dev) {
+                       if (dev) {
+                               dev_put(dev);
+                               in6_dev_put(idev);
+                       }
                        dev = &loopback_dev;
                        dev_hold(dev);
                        idev = in6_dev_get(dev);