# Re: \[PATCH net\] ipv6: bound temporary address regeneration advance

- From: Paolo Abeni \<pabeni@redhat.com\>
- Date: 2026-10-29 12:09:38 
- List: netdev
- Page: https://ratatoskr.run/netdev/2026/10/17826547
- Thread: https://ratatoskr.run/netdev/2026/10/17802739/t.md

```text
On 10/26/26 09:22, Yingjie Wang wrote:
> @@ -1394,6 +1405,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
>   	struct ifa6_config cfg;
>   	long max_desync_factor;
>   	struct in6_addr addr;
> +	u64 min_preferred_lft;

Minor nit: please fix the variable declaration order above.

>   	int ret = 0;
>   
>   	write_lock_bh(&idev->lock);
> @@ -1430,9 +1442,13 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, bool block)
>   	 * idev->desync_factor if it's larger
>   	 */
>   	cnf_temp_preferred_lft = READ_ONCE(idev->cnf.temp_prefered_lft);
> -	max_desync_factor = min_t(long,
> -				  READ_ONCE(idev->cnf.max_desync_factor),
> -				  cnf_temp_preferred_lft - regen_advance);
> +	max_desync_factor = 0;
> +	if (cnf_temp_preferred_lft > 0 &&
> +	    regen_advance < cnf_temp_preferred_lft)
> +		max_desync_factor =
> +			min_t(long,
> +			      READ_ONCE(idev->cnf.max_desync_factor),
> +			      cnf_temp_preferred_lft - regen_advance);

The above is quite ugly, you can probably make the statement more
palatable using some additional variable to store the intermediate
values.

/P

```
