Fix some just-noticed problems:

o Allow this to work with "nodevice random" by fixing where the MALLOC pool is defined.

o Fix the explicit reseed code. This was correct as submitted, but in the project branch doesn't need to set the "seeded" bit as this is done correctly in the "unblock" function.

o Remove some debug ifdeffing.

o Adjust comments.
This commit is contained in:
Mark Murray 2013-10-08 22:14:07 +00:00
parent 898f83f9eb
commit b9887f5053
7 changed files with 11 additions and 24 deletions

View File

@ -57,15 +57,6 @@ struct random_hardware_source random_ivy = {
.read = random_ivy_read
};
#if 1
static inline int
ivy_rng_store(uint64_t *tmp)
{
*tmp = 0xF001FACE;
return (sizeof(uint64_t));
}
#else
static inline int
ivy_rng_store(uint64_t *tmp)
{
@ -91,7 +82,6 @@ ivy_rng_store(uint64_t *tmp)
return (0);
#endif
}
#endif
static int
random_ivy_read(void *buf, int c)
@ -124,10 +114,6 @@ rdrand_modevent(module_t mod, int type, void *unused)
switch (type) {
case MOD_LOAD:
#if 1
live_entropy_source_register(&random_ivy);
printf("%s: CRAP RDRAND is present\n", random_ivy.ident);
#else
if (cpu_feature2 & CPUID2_RDRAND)
live_entropy_source_register(&random_ivy);
else
@ -136,7 +122,6 @@ rdrand_modevent(module_t mod, int type, void *unused)
#endif
printf("%s: RDRAND is not present\n",
random_ivy.ident);
#endif
break;
case MOD_UNLOAD:

View File

@ -57,10 +57,13 @@ struct random_hardware_source random_nehemiah = {
.read = random_nehemiah_read
};
/* This H/W RNG never stores more than 8 bytes in one go */
/* TODO: now that the Davies-Meyer hash is gone and we only use
* the 'xstore' instruction, do we still need to preserve the
* FPU state with fpu_kern_(enter|leave)() ?
*/
static struct fpu_kern_ctx *fpu_ctx_save;
/* This H/W source never stores more than 8 bytes in one go */
/* ARGSUSED */
static __inline size_t
VIA_RNG_store(void *buf)

View File

@ -55,6 +55,8 @@ static struct sysctl_ctx_list random_clist;
struct random_adaptor *random_adaptor;
MALLOC_DEFINE(M_ENTROPY, "entropy", "Entropy harvesting buffers and data structures");
int
random_adaptor_register(const char *name, struct random_adaptor *rsp)
{
@ -233,10 +235,8 @@ random_adaptors_reseed(void *unused)
{
(void)unused;
if (random_adaptor != NULL) {
if (random_adaptor != NULL)
(*random_adaptor->reseed)();
random_adaptor->seeded = 1;
}
arc4rand(NULL, 0, 1);
}
SYSINIT(random_reseed, SI_SUB_INTRINSIC_POST, SI_ORDER_SECOND,

View File

@ -31,6 +31,8 @@
#include <sys/eventhandler.h>
MALLOC_DECLARE(M_ENTROPY);
struct random_adaptors {
LIST_ENTRY(random_adaptors) entries; /* list of providers */
const char *name; /* name of random adaptor */

View File

@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
#include <dev/random/randomdev.h>
#include <dev/random/randomdev_soft.h>
#include <dev/random/random_adaptors.h>
#include <dev/random/random_harvestq.h>
#include <dev/random/live_entropy_sources.h>
#include <dev/random/rwfile.h>

View File

@ -74,8 +74,6 @@ static struct cdevsw random_cdevsw = {
.d_name = "random",
};
MALLOC_DEFINE(M_ENTROPY, "entropy", "Entropy harvesting buffers");
/* For use with make_dev(9)/destroy_dev(9). */
static struct cdev *random_dev;

View File

@ -30,8 +30,6 @@
* and non algorithm-specific for the entropy processor
*/
MALLOC_DECLARE(M_ENTROPY);
typedef void random_init_func_t(void);
typedef void random_deinit_func_t(void);
typedef int random_block_func_t(int);