Message ID | 20220223131954.6570-1-niels.dossche@ugent.be (mailing list archive) |
---|---|
State | Accepted |
Commit | 6c0d8833a605e195ae219b5042577ce52bf71fff |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] ipv6: prevent a possible race condition with lifetimes | expand |
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Wed, 23 Feb 2022 14:19:56 +0100 you wrote: > valid_lft, prefered_lft and tstamp are always accessed under the lock > "lock" in other places. Reading these without taking the lock may result > in inconsistencies regarding the calculation of the valid and preferred > variables since decisions are taken on these fields for those variables. > > Signed-off-by: Niels Dossche <dossche.niels@gmail.com> > Reviewed-by: David Ahern <dsahern@kernel.org> > Signed-off-by: Niels Dossche <niels.dossche@ugent.be> > > [...] Here is the summary with links: - [net,v2] ipv6: prevent a possible race condition with lifetimes https://git.kernel.org/netdev/net/c/6c0d8833a605 You are awesome, thank you!
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 3f23da8c0b10..6c8ab3e6e6fe 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -4998,6 +4998,7 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, nla_put_s32(skb, IFA_TARGET_NETNSID, args->netnsid)) goto error; + spin_lock_bh(&ifa->lock); if (!((ifa->flags&IFA_F_PERMANENT) && (ifa->prefered_lft == INFINITY_LIFE_TIME))) { preferred = ifa->prefered_lft; @@ -5019,6 +5020,7 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, preferred = INFINITY_LIFE_TIME; valid = INFINITY_LIFE_TIME; } + spin_unlock_bh(&ifa->lock); if (!ipv6_addr_any(&ifa->peer_addr)) { if (nla_put_in6_addr(skb, IFA_LOCAL, &ifa->addr) < 0 ||