aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/addrconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r--net/ipv6/addrconf.c45
1 files changed, 1 insertions, 44 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 441eeacfc851..c92f3d6a8f13 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -78,8 +78,6 @@
78 78
79#ifdef CONFIG_IPV6_PRIVACY 79#ifdef CONFIG_IPV6_PRIVACY
80#include <linux/random.h> 80#include <linux/random.h>
81#include <linux/crypto.h>
82#include <linux/scatterlist.h>
83#endif 81#endif
84 82
85#include <asm/uaccess.h> 83#include <asm/uaccess.h>
@@ -110,8 +108,6 @@ static int __ipv6_try_regen_rndid(struct inet6_dev *idev, struct in6_addr *tmpad
110static void ipv6_regen_rndid(unsigned long data); 108static void ipv6_regen_rndid(unsigned long data);
111 109
112static int desync_factor = MAX_DESYNC_FACTOR * HZ; 110static int desync_factor = MAX_DESYNC_FACTOR * HZ;
113static struct crypto_tfm *md5_tfm;
114static DEFINE_SPINLOCK(md5_tfm_lock);
115#endif 111#endif
116 112
117static int ipv6_count_addresses(struct inet6_dev *idev); 113static int ipv6_count_addresses(struct inet6_dev *idev);
@@ -371,8 +367,6 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev)
371 in6_dev_hold(ndev); 367 in6_dev_hold(ndev);
372 368
373#ifdef CONFIG_IPV6_PRIVACY 369#ifdef CONFIG_IPV6_PRIVACY
374 get_random_bytes(ndev->rndid, sizeof(ndev->rndid));
375 get_random_bytes(ndev->entropy, sizeof(ndev->entropy));
376 init_timer(&ndev->regen_timer); 370 init_timer(&ndev->regen_timer);
377 ndev->regen_timer.function = ipv6_regen_rndid; 371 ndev->regen_timer.function = ipv6_regen_rndid;
378 ndev->regen_timer.data = (unsigned long) ndev; 372 ndev->regen_timer.data = (unsigned long) ndev;
@@ -1376,34 +1370,9 @@ static int ipv6_inherit_eui64(u8 *eui, struct inet6_dev *idev)
1376/* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */ 1370/* (re)generation of randomized interface identifier (RFC 3041 3.2, 3.5) */
1377static int __ipv6_regen_rndid(struct inet6_dev *idev) 1371static int __ipv6_regen_rndid(struct inet6_dev *idev)
1378{ 1372{
1379 struct net_device *dev;
1380 struct scatterlist sg[2];
1381
1382 sg_set_buf(&sg[0], idev->entropy, 8);
1383 sg_set_buf(&sg[1], idev->work_eui64, 8);
1384
1385 dev = idev->dev;
1386
1387 if (ipv6_generate_eui64(idev->work_eui64, dev)) {
1388 printk(KERN_INFO
1389 "__ipv6_regen_rndid(idev=%p): cannot get EUI64 identifier; use random bytes.\n",
1390 idev);
1391 get_random_bytes(idev->work_eui64, sizeof(idev->work_eui64));
1392 }
1393regen: 1373regen:
1394 spin_lock(&md5_tfm_lock); 1374 get_random_bytes(idev->rndid, sizeof(idev->rndid));
1395 if (unlikely(md5_tfm == NULL)) {
1396 spin_unlock(&md5_tfm_lock);
1397 return -1;
1398 }
1399 crypto_digest_init(md5_tfm);
1400 crypto_digest_update(md5_tfm, sg, 2);
1401 crypto_digest_final(md5_tfm, idev->work_digest);
1402 spin_unlock(&md5_tfm_lock);
1403
1404 memcpy(idev->rndid, &idev->work_digest[0], 8);
1405 idev->rndid[0] &= ~0x02; 1375 idev->rndid[0] &= ~0x02;
1406 memcpy(idev->entropy, &idev->work_digest[8], 8);
1407 1376
1408 /* 1377 /*
1409 * <draft-ietf-ipngwg-temp-addresses-v2-00.txt>: 1378 * <draft-ietf-ipngwg-temp-addresses-v2-00.txt>:
@@ -3759,13 +3728,6 @@ int __init addrconf_init(void)
3759 3728
3760 register_netdevice_notifier(&ipv6_dev_notf); 3729 register_netdevice_notifier(&ipv6_dev_notf);
3761 3730
3762#ifdef CONFIG_IPV6_PRIVACY
3763 md5_tfm = crypto_alloc_tfm("md5", 0);
3764 if (unlikely(md5_tfm == NULL))
3765 printk(KERN_WARNING
3766 "failed to load transform for md5\n");
3767#endif
3768
3769 addrconf_verify(0); 3731 addrconf_verify(0);
3770 rtnetlink_links[PF_INET6] = inet6_rtnetlink_table; 3732 rtnetlink_links[PF_INET6] = inet6_rtnetlink_table;
3771#ifdef CONFIG_SYSCTL 3733#ifdef CONFIG_SYSCTL
@@ -3828,11 +3790,6 @@ void __exit addrconf_cleanup(void)
3828 3790
3829 rtnl_unlock(); 3791 rtnl_unlock();
3830 3792
3831#ifdef CONFIG_IPV6_PRIVACY
3832 crypto_free_tfm(md5_tfm);
3833 md5_tfm = NULL;
3834#endif
3835
3836#ifdef CONFIG_PROC_FS 3793#ifdef CONFIG_PROC_FS
3837 proc_net_remove("if_inet6"); 3794 proc_net_remove("if_inet6");
3838#endif 3795#endif