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_ */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to