From b4db2b35fc444409daf483006111a2a705550fff Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Fri, 10 Feb 2017 16:34:07 +0000 Subject: [PATCH] afs: Use core kernel UUID generation AFS uses a time based UUID to identify the host itself. This requires getting a timestamp which is currently done through the getnstimeofday() interface that we want to eventually get rid of. Instead of replacing it with a ktime-based interface, simply remove the entire function and use generate_random_uuid() instead, which has a v4 ("completely random") UUID instead of the time-based one. Signed-off-by: Arnd Bergmann Signed-off-by: David Howells --- fs/afs/internal.h | 11 +++++------ fs/afs/main.c | 48 +-------------------------------------------- fs/afs/netdevices.c | 21 -------------------- 3 files changed, 6 insertions(+), 74 deletions(-) diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 79061fa17168..8acf3670e756 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -560,6 +560,11 @@ extern struct vfsmount *afs_d_automount(struct path *); extern int afs_mntpt_check_symlink(struct afs_vnode *, struct key *); extern void afs_mntpt_kill_timer(void); +/* + * netdevices.c + */ +extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool); + /* * proc.c */ @@ -623,12 +628,6 @@ extern void __exit afs_purge_servers(void); extern int afs_fs_init(void); extern void afs_fs_exit(void); -/* - * use-rtnetlink.c - */ -extern int afs_get_ipv4_interfaces(struct afs_interface *, size_t, bool); -extern int afs_get_MAC_address(u8 *, size_t); - /* * vlclient.c */ diff --git a/fs/afs/main.c b/fs/afs/main.c index a07c14df3fd1..51d7d17bca57 100644 --- a/fs/afs/main.c +++ b/fs/afs/main.c @@ -34,50 +34,6 @@ MODULE_PARM_DESC(rootcell, "root AFS cell name and VL server IP addr list"); struct uuid_v1 afs_uuid; struct workqueue_struct *afs_wq; -/* - * get a client UUID - */ -static int __init afs_get_client_UUID(void) -{ - struct timespec ts; - u64 uuidtime; - u16 clockseq, hi_v; - int ret; - - /* read the MAC address of one of the external interfaces and construct - * a UUID from it */ - ret = afs_get_MAC_address(afs_uuid.node, sizeof(afs_uuid.node)); - if (ret < 0) - return ret; - - getnstimeofday(&ts); - uuidtime = (u64) ts.tv_sec * 1000 * 1000 * 10; - uuidtime += ts.tv_nsec / 100; - uuidtime += UUID_TO_UNIX_TIME; - afs_uuid.time_low = htonl(uuidtime); - afs_uuid.time_mid = htons(uuidtime >> 32); - hi_v = (uuidtime >> 48) & UUID_TIMEHI_MASK; - hi_v |= UUID_VERSION_TIME; - afs_uuid.time_hi_and_version = htons(hi_v); - - get_random_bytes(&clockseq, 2); - afs_uuid.clock_seq_low = clockseq; - afs_uuid.clock_seq_hi_and_reserved = - (clockseq >> 8) & UUID_CLOCKHI_MASK; - afs_uuid.clock_seq_hi_and_reserved |= UUID_VARIANT_STD; - - _debug("AFS UUID: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", - ntohl(afs_uuid.time_low), - ntohs(afs_uuid.time_mid), - ntohs(afs_uuid.time_hi_and_version), - afs_uuid.clock_seq_hi_and_reserved, - afs_uuid.clock_seq_low, - afs_uuid.node[0], afs_uuid.node[1], afs_uuid.node[2], - afs_uuid.node[3], afs_uuid.node[4], afs_uuid.node[5]); - - return 0; -} - /* * initialise the AFS client FS module */ @@ -87,9 +43,7 @@ static int __init afs_init(void) printk(KERN_INFO "kAFS: Red Hat AFS client v0.1 registering.\n"); - ret = afs_get_client_UUID(); - if (ret < 0) - return ret; + generate_random_uuid((unsigned char *)&afs_uuid); /* create workqueue */ ret = -ENOMEM; diff --git a/fs/afs/netdevices.c b/fs/afs/netdevices.c index 7ad36506c256..40b2bab3e401 100644 --- a/fs/afs/netdevices.c +++ b/fs/afs/netdevices.c @@ -11,27 +11,6 @@ #include #include "internal.h" -/* - * get a MAC address from a random ethernet interface that has a real one - * - the buffer will normally be 6 bytes in size - */ -int afs_get_MAC_address(u8 *mac, size_t maclen) -{ - struct net_device *dev; - int ret = -ENODEV; - - BUG_ON(maclen != ETH_ALEN); - - rtnl_lock(); - dev = __dev_getfirstbyhwtype(&init_net, ARPHRD_ETHER); - if (dev) { - memcpy(mac, dev->dev_addr, maclen); - ret = 0; - } - rtnl_unlock(); - return ret; -} - /* * get a list of this system's interface IPv4 addresses, netmasks and MTUs * - maxbufs must be at least 1 -- GitLab