svn commit: r301544 - head/sys/compat/linuxkpi/common/include/linux
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Jun 7 13:10:15 UTC 2016
Author: hselasky
Date: Tue Jun 7 13:10:13 2016
New Revision: 301544
URL: https://svnweb.freebsd.org/changeset/base/301544
Log:
Fallback to arc4rand() in the LinuxKPI when read_random() returns
zero. This can happen for virtual machines.
MFC after: 1 week
Sponsored by: Mellanox Technologies
Modified:
head/sys/compat/linuxkpi/common/include/linux/etherdevice.h
head/sys/compat/linuxkpi/common/include/linux/random.h
Modified: head/sys/compat/linuxkpi/common/include/linux/etherdevice.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/etherdevice.h Tue Jun 7 09:03:27 2016 (r301543)
+++ head/sys/compat/linuxkpi/common/include/linux/etherdevice.h Tue Jun 7 13:10:13 2016 (r301544)
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2015 Mellanox Technologies, Ltd. All rights reserved.
+ * Copyright (c) 2015-2016 Mellanox Technologies, Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -102,7 +102,8 @@ eth_broadcast_addr(u8 *pa)
static inline void
random_ether_addr(u8 * dst)
{
- read_random(dst, 6);
+ if (read_random(dst, 6) == 0)
+ arc4rand(dst, 6, 0);
dst[0] &= 0xfe;
dst[0] |= 0x02;
Modified: head/sys/compat/linuxkpi/common/include/linux/random.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/random.h Tue Jun 7 09:03:27 2016 (r301543)
+++ head/sys/compat/linuxkpi/common/include/linux/random.h Tue Jun 7 13:10:13 2016 (r301544)
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2016 Mellanox Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,11 +32,13 @@
#define _LINUX_RANDOM_H_
#include <sys/random.h>
+#include <sys/libkern.h>
static inline void
get_random_bytes(void *buf, int nbytes)
{
- read_random(buf, nbytes);
+ if (read_random(buf, nbytes) == 0)
+ arc4rand(buf, nbytes, 0);
}
#endif /* _LINUX_RANDOM_H_ */
More information about the svn-src-all
mailing list