Unverified Commit 7f59603f authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!9499 ipv6: fix race condition between ipv6_get_ifaddr and ipv6_del_addr

parents 59c90233 3b2d9a75
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -429,6 +429,10 @@ static inline void in6_ifa_hold(struct inet6_ifaddr *ifp)
	refcount_inc(&ifp->refcnt);
}

static inline bool in6_ifa_hold_safe(struct inet6_ifaddr *ifp)
{
	return refcount_inc_not_zero(&ifp->refcnt);
}

/*
 *	compute link-local solicited-node multicast address
+4 −3
Original line number Diff line number Diff line
@@ -2033,12 +2033,13 @@ struct inet6_ifaddr *ipv6_get_ifaddr(struct net *net, const struct in6_addr *add
		if (ipv6_addr_equal(&ifp->addr, addr)) {
			if (!dev || ifp->idev->dev == dev ||
			    !(ifp->scope&(IFA_LINK|IFA_HOST) || strict)) {
				if (in6_ifa_hold_safe(ifp)) {
					result = ifp;
				in6_ifa_hold(ifp);
					break;
				}
			}
		}
	}
	rcu_read_unlock();

	return result;