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
This commit is contained in:
Hans Petter Selasky 2016-06-07 13:10:13 +00:00
parent c4263292fe
commit d8571d3ea3
2 changed files with 7 additions and 4 deletions

View File

@ -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;

View File

@ -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_ */