Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 327757
b: refs/heads/master
c: eb7e057
h: refs/heads/master
i:
  327755: 1bdb3dc
v: v3
  • Loading branch information
Sorin Dumitru authored and David S. Miller committed Aug 31, 2012
1 parent cd59c7a commit 02748d7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d1a53dfd114a6c53464de116cdab88d934bfe92f
refs/heads/master: eb7e0575966f9c84434e92c8a3f69719cc2e7571
29 changes: 7 additions & 22 deletions trunk/net/ipv6/addrconf.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,8 @@ static inline void addrconf_sysctl_unregister(struct inet6_dev *idev)
#endif

#ifdef CONFIG_IPV6_PRIVACY
static int __ipv6_regen_rndid(struct inet6_dev *idev);
static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
static void __ipv6_regen_rndid(struct inet6_dev *idev);
static void __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr);
static void ipv6_regen_rndid(unsigned long data);
#endif

Expand Down Expand Up @@ -852,16 +852,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
}
in6_ifa_hold(ifp);
memcpy(addr.s6_addr, ifp->addr.s6_addr, 8);
if (__ipv6_try_regen_rndid(idev, tmpaddr) < 0) {
spin_unlock_bh(&ifp->lock);
write_unlock(&idev->lock);
pr_warn("%s: regeneration of randomized interface id failed\n",
__func__);
in6_ifa_put(ifp);
in6_dev_put(idev);
ret = -1;
goto out;
}
__ipv6_try_regen_rndid(idev, tmpaddr);
memcpy(&addr.s6_addr[8], idev->rndid, 8);
age = (now - ifp->tstamp) / HZ;
tmp_valid_lft = min_t(__u32,
Expand Down Expand Up @@ -1600,7 +1591,7 @@ static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)

#ifdef CONFIG_IPV6_PRIVACY
/* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */
static int __ipv6_regen_rndid(struct inet6_dev *idev)
static void __ipv6_regen_rndid(struct inet6_dev *idev)
{
regen:
get_random_bytes(idev->rndid, sizeof(idev->rndid));
Expand All @@ -1627,8 +1618,6 @@ static int __ipv6_regen_rndid(struct inet6_dev *idev)
if ((idev->rndid[2]|idev->rndid[3]|idev->rndid[4]|idev->rndid[5]|idev->rndid[6]|idev->rndid[7]) == 0x00)
goto regen;
}

return 0;
}

static void ipv6_regen_rndid(unsigned long data)
Expand All @@ -1642,8 +1631,7 @@ static void ipv6_regen_rndid(unsigned long data)
if (idev->dead)
goto out;

if (__ipv6_regen_rndid(idev) < 0)
goto out;
__ipv6_regen_rndid(idev);

expires = jiffies +
idev->cnf.temp_prefered_lft * HZ -
Expand All @@ -1664,13 +1652,10 @@ static void ipv6_regen_rndid(unsigned long data)
in6_dev_put(idev);
}

static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr)
static void __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpaddr)
{
int ret = 0;

if (tmpaddr && memcmp(idev->rndid, &tmpaddr->s6_addr[8], 8) == 0)
ret = __ipv6_regen_rndid(idev);
return ret;
__ipv6_regen_rndid(idev);
}
#endif

Expand Down

0 comments on commit 02748d7

Please sign in to comment.