Skip to content

Commit

Permalink
afs: Use core kernel UUID generation
Browse files Browse the repository at this point in the history
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 <arnd@arndb.de>
Signed-off-by: David Howells <dhowells@redhat.com>
  • Loading branch information
Arnd Bergmann authored and David Howells committed Feb 10, 2017
1 parent ff54877 commit b4db2b3
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 74 deletions.
11 changes: 5 additions & 6 deletions fs/afs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down Expand Up @@ -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
*/
Expand Down
48 changes: 1 addition & 47 deletions fs/afs/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand All @@ -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;
Expand Down
21 changes: 0 additions & 21 deletions fs/afs/netdevices.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,6 @@
#include <net/net_namespace.h>
#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
Expand Down

0 comments on commit b4db2b3

Please sign in to comment.