Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jun 2016 10:40:35 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r302271 - stable/10/sys/ofed/include/linux
Message-ID:  <201606291040.u5TAeZPC057864@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Wed Jun 29 10:40:34 2016
New Revision: 302271
URL: https://svnweb.freebsd.org/changeset/base/302271

Log:
  MFC r301544:
  Fallback to arc4rand() in the LinuxKPI when read_random() returns
  zero. This can happen for virtual machines.
  
  Sponsored by:	Mellanox Technologies

Modified:
  stable/10/sys/ofed/include/linux/etherdevice.h
  stable/10/sys/ofed/include/linux/random.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/ofed/include/linux/etherdevice.h
==============================================================================
--- stable/10/sys/ofed/include/linux/etherdevice.h	Wed Jun 29 10:33:11 2016	(r302270)
+++ stable/10/sys/ofed/include/linux/etherdevice.h	Wed Jun 29 10:40:34 2016	(r302271)
@@ -137,7 +137,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: stable/10/sys/ofed/include/linux/random.h
==============================================================================
--- stable/10/sys/ofed/include/linux/random.h	Wed Jun 29 10:33:11 2016	(r302270)
+++ stable/10/sys/ofed/include/linux/random.h	Wed Jun 29 10:40:34 2016	(r302271)
@@ -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
@@ -31,11 +31,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_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606291040.u5TAeZPC057864>