diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
| -rw-r--r-- | net/ipv6/addrconf.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 10ce86bf228e..d720f6f5de3f 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -104,7 +104,7 @@ static inline u32 cstamp_delta(unsigned long cstamp)  static inline s32 rfc3315_s14_backoff_init(s32 irt)  {  	/* multiply 'initial retransmission time' by 0.9 .. 1.1 */ -	u64 tmp = (900000 + prandom_u32() % 200001) * (u64)irt; +	u64 tmp = get_random_u32_inclusive(900000, 1100000) * (u64)irt;  	do_div(tmp, 1000000);  	return (s32)tmp;  } @@ -112,11 +112,11 @@ static inline s32 rfc3315_s14_backoff_init(s32 irt)  static inline s32 rfc3315_s14_backoff_update(s32 rt, s32 mrt)  {  	/* multiply 'retransmission timeout' by 1.9 .. 2.1 */ -	u64 tmp = (1900000 + prandom_u32() % 200001) * (u64)rt; +	u64 tmp = get_random_u32_inclusive(1900000, 2100000) * (u64)rt;  	do_div(tmp, 1000000);  	if ((s32)tmp > mrt) {  		/* multiply 'maximum retransmission time' by 0.9 .. 1.1 */ -		tmp = (900000 + prandom_u32() % 200001) * (u64)mrt; +		tmp = get_random_u32_inclusive(900000, 1100000) * (u64)mrt;  		do_div(tmp, 1000000);  	}  	return (s32)tmp; @@ -3967,7 +3967,7 @@ static void addrconf_dad_kick(struct inet6_ifaddr *ifp)  	if (ifp->flags & IFA_F_OPTIMISTIC)  		rand_num = 0;  	else -		rand_num = prandom_u32() % (idev->cnf.rtr_solicit_delay ? : 1); +		rand_num = get_random_u32_below(idev->cnf.rtr_solicit_delay ? : 1);  	nonce = 0;  	if (idev->cnf.enhanced_dad || @@ -7214,9 +7214,11 @@ err_reg_dflt:  	__addrconf_sysctl_unregister(net, all, NETCONFA_IFINDEX_ALL);  err_reg_all:  	kfree(dflt); +	net->ipv6.devconf_dflt = NULL;  #endif  err_alloc_dflt:  	kfree(all); +	net->ipv6.devconf_all = NULL;  err_alloc_all:  	kfree(net->ipv6.inet6_addr_lst);  err_alloc_addr:  | 
