struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *addr,
                                     struct net_device *dev, int strict)
 {
-       struct inet6_ifaddr *ifp = NULL;
-       struct hlist_node *node;
+       struct inet6_ifaddr *ifp, *result = NULL;
        unsigned int hash = ipv6_addr_hash(addr);
+       struct hlist_node *node;
 
        rcu_read_lock_bh();
        hlist_for_each_entry_rcu(ifp, node, &inet6_addr_lst[hash], addr_lst) {
                if (ipv6_addr_equal(&ifp->addr, addr)) {
                        if (dev == NULL || ifp->idev->dev == dev ||
                            !(ifp->scope&(IFA_LINK|IFA_HOST) || strict)) {
+                               result = ifp;
                                in6_ifa_hold(ifp);
                                break;
                        }
        }
        rcu_read_unlock_bh();
 
-       return ifp;
+       return result;
 }
 
 /* Gets referenced address, destroys ifaddr */