You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
[IPV6] ADDRCONF: Allow longer lifetime on 64bit archs.
- Allow longer lifetimes (>= 0x7fffffff/HZ) on 64bit archs by using unsigned long. - Shadow this arithmetic overflow workaround by introducing helper functions: addrconf_timeout_fixup() and addrconf_finite_timeout(). Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
This commit is contained in:
@@ -94,6 +94,28 @@ extern void addrconf_join_solict(struct net_device *dev,
|
||||
extern void addrconf_leave_solict(struct inet6_dev *idev,
|
||||
struct in6_addr *addr);
|
||||
|
||||
static inline unsigned long addrconf_timeout_fixup(u32 timeout,
|
||||
unsigned unit)
|
||||
{
|
||||
if (timeout == 0xffffffff)
|
||||
return ~0UL;
|
||||
|
||||
/*
|
||||
* Avoid arithmetic overflow.
|
||||
* Assuming unit is constant and non-zero, this "if" statement
|
||||
* will go away on 64bit archs.
|
||||
*/
|
||||
if (0xfffffffe > LONG_MAX / unit && timeout > LONG_MAX / unit)
|
||||
return LONG_MAX / unit;
|
||||
|
||||
return timeout;
|
||||
}
|
||||
|
||||
static inline int addrconf_finite_timeout(unsigned long timeout)
|
||||
{
|
||||
return ~timeout;
|
||||
}
|
||||
|
||||
/*
|
||||
* IPv6 Address Label subsystem (addrlabel.c)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user