diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-06 11:16:24 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-06 11:16:24 -0400 |
| commit | f4f142ed4ef835709c7e6d12eaca10d190bcebed (patch) | |
| tree | a0bc6850239fe3551bb67f5707bfef153ac437fe /include | |
| parent | bb2cbf5e9367d8598fecd0c48dead69560750223 (diff) | |
| parent | e02b876597777ab26288dd2611a97b597d14d661 (diff) | |
Merge tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random
Pull randomness updates from Ted Ts'o:
"Cleanups and bug fixes to /dev/random, add a new getrandom(2) system
call, which is a superset of OpenBSD's getentropy(2) call, for use
with userspace crypto libraries such as LibreSSL.
Also add the ability to have a kernel thread to pull entropy from
hardware rng devices into /dev/random"
* tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random:
hwrng: Pass entropy to add_hwgenerator_randomness() in bits, not bytes
random: limit the contribution of the hw rng to at most half
random: introduce getrandom(2) system call
hw_random: fix sparse warning (NULL vs 0 for pointer)
random: use registers from interrupted code for CPU's w/o a cycle counter
hwrng: add per-device entropy derating
hwrng: create filler thread
random: add_hwgenerator_randomness() for feeding entropy from devices
random: use an improved fast_mix() function
random: clean up interrupt entropy accounting for archs w/o cycle counters
random: only update the last_pulled time if we actually transferred entropy
random: remove unneeded hash of a portion of the entropy pool
random: always update the entropy pool under the spinlock
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/hw_random.h | 5 | ||||
| -rw-r--r-- | include/linux/syscalls.h | 3 | ||||
| -rw-r--r-- | include/uapi/asm-generic/unistd.h | 4 | ||||
| -rw-r--r-- | include/uapi/linux/random.h | 9 |
4 files changed, 20 insertions, 1 deletions
diff --git a/include/linux/hw_random.h b/include/linux/hw_random.h index b4b0eef5fddf..914bb08cd738 100644 --- a/include/linux/hw_random.h +++ b/include/linux/hw_random.h | |||
| @@ -29,6 +29,8 @@ | |||
| 29 | * @read: New API. drivers can fill up to max bytes of data | 29 | * @read: New API. drivers can fill up to max bytes of data |
| 30 | * into the buffer. The buffer is aligned for any type. | 30 | * into the buffer. The buffer is aligned for any type. |
| 31 | * @priv: Private data, for use by the RNG driver. | 31 | * @priv: Private data, for use by the RNG driver. |
| 32 | * @quality: Estimation of true entropy in RNG's bitstream | ||
| 33 | * (per mill). | ||
| 32 | */ | 34 | */ |
| 33 | struct hwrng { | 35 | struct hwrng { |
| 34 | const char *name; | 36 | const char *name; |
| @@ -38,6 +40,7 @@ struct hwrng { | |||
| 38 | int (*data_read)(struct hwrng *rng, u32 *data); | 40 | int (*data_read)(struct hwrng *rng, u32 *data); |
| 39 | int (*read)(struct hwrng *rng, void *data, size_t max, bool wait); | 41 | int (*read)(struct hwrng *rng, void *data, size_t max, bool wait); |
| 40 | unsigned long priv; | 42 | unsigned long priv; |
| 43 | unsigned short quality; | ||
| 41 | 44 | ||
| 42 | /* internal. */ | 45 | /* internal. */ |
| 43 | struct list_head list; | 46 | struct list_head list; |
| @@ -47,5 +50,7 @@ struct hwrng { | |||
| 47 | extern int hwrng_register(struct hwrng *rng); | 50 | extern int hwrng_register(struct hwrng *rng); |
| 48 | /** Unregister a Hardware Random Number Generator driver. */ | 51 | /** Unregister a Hardware Random Number Generator driver. */ |
| 49 | extern void hwrng_unregister(struct hwrng *rng); | 52 | extern void hwrng_unregister(struct hwrng *rng); |
| 53 | /** Feed random bits into the pool. */ | ||
| 54 | extern void add_hwgenerator_randomness(const char *buffer, size_t count, size_t entropy); | ||
| 50 | 55 | ||
| 51 | #endif /* LINUX_HWRANDOM_H_ */ | 56 | #endif /* LINUX_HWRANDOM_H_ */ |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 1713977ee26f..701daff5d899 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -868,4 +868,7 @@ asmlinkage long sys_kcmp(pid_t pid1, pid_t pid2, int type, | |||
| 868 | asmlinkage long sys_finit_module(int fd, const char __user *uargs, int flags); | 868 | asmlinkage long sys_finit_module(int fd, const char __user *uargs, int flags); |
| 869 | asmlinkage long sys_seccomp(unsigned int op, unsigned int flags, | 869 | asmlinkage long sys_seccomp(unsigned int op, unsigned int flags, |
| 870 | const char __user *uargs); | 870 | const char __user *uargs); |
| 871 | asmlinkage long sys_getrandom(char __user *buf, size_t count, | ||
| 872 | unsigned int flags); | ||
| 873 | |||
| 871 | #endif | 874 | #endif |
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index 65acbf0e2867..f1afd607f043 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h | |||
| @@ -701,9 +701,11 @@ __SYSCALL(__NR_sched_getattr, sys_sched_getattr) | |||
| 701 | __SYSCALL(__NR_renameat2, sys_renameat2) | 701 | __SYSCALL(__NR_renameat2, sys_renameat2) |
| 702 | #define __NR_seccomp 277 | 702 | #define __NR_seccomp 277 |
| 703 | __SYSCALL(__NR_seccomp, sys_seccomp) | 703 | __SYSCALL(__NR_seccomp, sys_seccomp) |
| 704 | #define __NR_getrandom 278 | ||
| 705 | __SYSCALL(__NR_getrandom, sys_getrandom) | ||
| 704 | 706 | ||
| 705 | #undef __NR_syscalls | 707 | #undef __NR_syscalls |
| 706 | #define __NR_syscalls 278 | 708 | #define __NR_syscalls 279 |
| 707 | 709 | ||
| 708 | /* | 710 | /* |
| 709 | * All syscalls below here should go away really, | 711 | * All syscalls below here should go away really, |
diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h index fff3528a078f..3f93d1695e7f 100644 --- a/include/uapi/linux/random.h +++ b/include/uapi/linux/random.h | |||
| @@ -40,4 +40,13 @@ struct rand_pool_info { | |||
| 40 | __u32 buf[0]; | 40 | __u32 buf[0]; |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | /* | ||
| 44 | * Flags for getrandom(2) | ||
| 45 | * | ||
| 46 | * GRND_NONBLOCK Don't block and return EAGAIN instead | ||
| 47 | * GRND_RANDOM Use the /dev/random pool instead of /dev/urandom | ||
| 48 | */ | ||
| 49 | #define GRND_NONBLOCK 0x0001 | ||
| 50 | #define GRND_RANDOM 0x0002 | ||
| 51 | |||
| 43 | #endif /* _UAPI_LINUX_RANDOM_H */ | 52 | #endif /* _UAPI_LINUX_RANDOM_H */ |
