Commit acd77500 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random

Pull random changes from Ted Ts'o:
 "Change /dev/random so that it uses the CRNG and only blocking if the
  CRNG hasn't initialized, instead of the old blocking pool. Also clean
  up archrandom.h, and some other miscellaneous cleanups"

* tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random: (24 commits)
  s390x: Mark archrandom.h functions __must_check
  powerpc: Mark archrandom.h functions __must_check
  powerpc: Use bool in archrandom.h
  x86: Mark archrandom.h functions __must_check
  linux/random.h: Mark CONFIG_ARCH_RANDOM functions __must_check
  linux/random.h: Use false with bool
  linux/random.h: Remove arch_has_random, arch_has_random_seed
  s390: Remove arch_has_random, arch_has_random_seed
  powerpc: Remove arch_has_random, arch_has_random_seed
  x86: Remove arch_has_random, arch_has_random_seed
  random: remove some dead code of poolinfo
  random: fix typo in add_timer_randomness()
  random: Add and use pr_fmt()
  random: convert to ENTROPY_BITS for better code readability
  random: remove unnecessary unlikely()
  random: remove kernel.random.read_wakeup_threshold
  random: delete code to pull data into pools
  random: remove the blocking pool
  random: make /dev/random be almost like /dev/urandom
  random: ignore GRND_RANDOM in getentropy(2)
  ...
parents 26dca6db 4cb760b0
...@@ -6,27 +6,28 @@ ...@@ -6,27 +6,28 @@
#include <asm/machdep.h> #include <asm/machdep.h>
static inline int arch_get_random_long(unsigned long *v) static inline bool __must_check arch_get_random_long(unsigned long *v)
{ {
return 0; return false;
} }
static inline int arch_get_random_int(unsigned int *v) static inline bool __must_check arch_get_random_int(unsigned int *v)
{ {
return 0; return false;
} }
static inline int arch_get_random_seed_long(unsigned long *v) static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
{ {
if (ppc_md.get_random_seed) if (ppc_md.get_random_seed)
return ppc_md.get_random_seed(v); return ppc_md.get_random_seed(v);
return 0; return false;
} }
static inline int arch_get_random_seed_int(unsigned int *v)
static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
{ {
unsigned long val; unsigned long val;
int rc; bool rc;
rc = arch_get_random_seed_long(&val); rc = arch_get_random_seed_long(&val);
if (rc) if (rc)
...@@ -34,16 +35,6 @@ static inline int arch_get_random_seed_int(unsigned int *v) ...@@ -34,16 +35,6 @@ static inline int arch_get_random_seed_int(unsigned int *v)
return rc; return rc;
} }
static inline int arch_has_random(void)
{
return 0;
}
static inline int arch_has_random_seed(void)
{
return !!ppc_md.get_random_seed;
}
#endif /* CONFIG_ARCH_RANDOM */ #endif /* CONFIG_ARCH_RANDOM */
#ifdef CONFIG_PPC_POWERNV #ifdef CONFIG_PPC_POWERNV
......
...@@ -21,29 +21,17 @@ extern atomic64_t s390_arch_random_counter; ...@@ -21,29 +21,17 @@ extern atomic64_t s390_arch_random_counter;
bool s390_arch_random_generate(u8 *buf, unsigned int nbytes); bool s390_arch_random_generate(u8 *buf, unsigned int nbytes);
static inline bool arch_has_random(void) static inline bool __must_check arch_get_random_long(unsigned long *v)
{ {
return false; return false;
} }
static inline bool arch_has_random_seed(void) static inline bool __must_check arch_get_random_int(unsigned int *v)
{ {
if (static_branch_likely(&s390_arch_random_available))
return true;
return false; return false;
} }
static inline bool arch_get_random_long(unsigned long *v) static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
{
return false;
}
static inline bool arch_get_random_int(unsigned int *v)
{
return false;
}
static inline bool arch_get_random_seed_long(unsigned long *v)
{ {
if (static_branch_likely(&s390_arch_random_available)) { if (static_branch_likely(&s390_arch_random_available)) {
return s390_arch_random_generate((u8 *)v, sizeof(*v)); return s390_arch_random_generate((u8 *)v, sizeof(*v));
...@@ -51,7 +39,7 @@ static inline bool arch_get_random_seed_long(unsigned long *v) ...@@ -51,7 +39,7 @@ static inline bool arch_get_random_seed_long(unsigned long *v)
return false; return false;
} }
static inline bool arch_get_random_seed_int(unsigned int *v) static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
{ {
if (static_branch_likely(&s390_arch_random_available)) { if (static_branch_likely(&s390_arch_random_available)) {
return s390_arch_random_generate((u8 *)v, sizeof(*v)); return s390_arch_random_generate((u8 *)v, sizeof(*v));
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
/* Unconditional execution of RDRAND and RDSEED */ /* Unconditional execution of RDRAND and RDSEED */
static inline bool rdrand_long(unsigned long *v) static inline bool __must_check rdrand_long(unsigned long *v)
{ {
bool ok; bool ok;
unsigned int retry = RDRAND_RETRY_LOOPS; unsigned int retry = RDRAND_RETRY_LOOPS;
...@@ -41,7 +41,7 @@ static inline bool rdrand_long(unsigned long *v) ...@@ -41,7 +41,7 @@ static inline bool rdrand_long(unsigned long *v)
return false; return false;
} }
static inline bool rdrand_int(unsigned int *v) static inline bool __must_check rdrand_int(unsigned int *v)
{ {
bool ok; bool ok;
unsigned int retry = RDRAND_RETRY_LOOPS; unsigned int retry = RDRAND_RETRY_LOOPS;
...@@ -55,7 +55,7 @@ static inline bool rdrand_int(unsigned int *v) ...@@ -55,7 +55,7 @@ static inline bool rdrand_int(unsigned int *v)
return false; return false;
} }
static inline bool rdseed_long(unsigned long *v) static inline bool __must_check rdseed_long(unsigned long *v)
{ {
bool ok; bool ok;
asm volatile(RDSEED_LONG asm volatile(RDSEED_LONG
...@@ -64,7 +64,7 @@ static inline bool rdseed_long(unsigned long *v) ...@@ -64,7 +64,7 @@ static inline bool rdseed_long(unsigned long *v)
return ok; return ok;
} }
static inline bool rdseed_int(unsigned int *v) static inline bool __must_check rdseed_int(unsigned int *v)
{ {
bool ok; bool ok;
asm volatile(RDSEED_INT asm volatile(RDSEED_INT
...@@ -73,10 +73,6 @@ static inline bool rdseed_int(unsigned int *v) ...@@ -73,10 +73,6 @@ static inline bool rdseed_int(unsigned int *v)
return ok; return ok;
} }
/* Conditional execution based on CPU type */
#define arch_has_random() static_cpu_has(X86_FEATURE_RDRAND)
#define arch_has_random_seed() static_cpu_has(X86_FEATURE_RDSEED)
/* /*
* These are the generic interfaces; they must not be declared if the * These are the generic interfaces; they must not be declared if the
* stubs in <linux/random.h> are to be invoked, * stubs in <linux/random.h> are to be invoked,
...@@ -84,24 +80,24 @@ static inline bool rdseed_int(unsigned int *v) ...@@ -84,24 +80,24 @@ static inline bool rdseed_int(unsigned int *v)
*/ */
#ifdef CONFIG_ARCH_RANDOM #ifdef CONFIG_ARCH_RANDOM
static inline bool arch_get_random_long(unsigned long *v) static inline bool __must_check arch_get_random_long(unsigned long *v)
{ {
return arch_has_random() ? rdrand_long(v) : false; return static_cpu_has(X86_FEATURE_RDRAND) ? rdrand_long(v) : false;
} }
static inline bool arch_get_random_int(unsigned int *v) static inline bool __must_check arch_get_random_int(unsigned int *v)
{ {
return arch_has_random() ? rdrand_int(v) : false; return static_cpu_has(X86_FEATURE_RDRAND) ? rdrand_int(v) : false;
} }
static inline bool arch_get_random_seed_long(unsigned long *v) static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
{ {
return arch_has_random_seed() ? rdseed_long(v) : false; return static_cpu_has(X86_FEATURE_RDSEED) ? rdseed_long(v) : false;
} }
static inline bool arch_get_random_seed_int(unsigned int *v) static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
{ {
return arch_has_random_seed() ? rdseed_int(v) : false; return static_cpu_has(X86_FEATURE_RDSEED) ? rdseed_int(v) : false;
} }
extern void x86_init_rdrand(struct cpuinfo_x86 *c); extern void x86_init_rdrand(struct cpuinfo_x86 *c);
......
This diff is collapsed.
...@@ -167,29 +167,21 @@ static inline void prandom_seed_state(struct rnd_state *state, u64 seed) ...@@ -167,29 +167,21 @@ static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
#ifdef CONFIG_ARCH_RANDOM #ifdef CONFIG_ARCH_RANDOM
# include <asm/archrandom.h> # include <asm/archrandom.h>
#else #else
static inline bool arch_get_random_long(unsigned long *v) static inline bool __must_check arch_get_random_long(unsigned long *v)
{ {
return 0; return false;
} }
static inline bool arch_get_random_int(unsigned int *v) static inline bool __must_check arch_get_random_int(unsigned int *v)
{ {
return 0; return false;
} }
static inline bool arch_has_random(void) static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
{ {
return 0; return false;
} }
static inline bool arch_get_random_seed_long(unsigned long *v) static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
{ {
return 0; return false;
}
static inline bool arch_get_random_seed_int(unsigned int *v)
{
return 0;
}
static inline bool arch_has_random_seed(void)
{
return 0;
} }
#endif #endif
......
...@@ -48,9 +48,11 @@ struct rand_pool_info { ...@@ -48,9 +48,11 @@ struct rand_pool_info {
* Flags for getrandom(2) * Flags for getrandom(2)
* *
* GRND_NONBLOCK Don't block and return EAGAIN instead * GRND_NONBLOCK Don't block and return EAGAIN instead
* GRND_RANDOM Use the /dev/random pool instead of /dev/urandom * GRND_RANDOM No effect
* GRND_INSECURE Return non-cryptographic random bytes
*/ */
#define GRND_NONBLOCK 0x0001 #define GRND_NONBLOCK 0x0001
#define GRND_RANDOM 0x0002 #define GRND_RANDOM 0x0002
#define GRND_INSECURE 0x0004
#endif /* _UAPI_LINUX_RANDOM_H */ #endif /* _UAPI_LINUX_RANDOM_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment