Commit 04ec96b7 authored by Jason A. Donenfeld's avatar Jason A. Donenfeld

random: make more consistent use of integer types

We've been using a flurry of int, unsigned int, size_t, and ssize_t.
Let's unify all of this into size_t where it makes sense, as it does in
most places, and leave ssize_t for return values with possible errors.

In addition, keeping with the convention of other functions in this
file, functions that are dealing with raw bytes now take void *
consistently instead of a mix of that and u8 *, because much of the time
we're actually passing some other structure that is then interpreted as
bytes by the function.

We also take the opportunity to fix the outdated and incorrect comment
in get_random_bytes_arch().

Cc: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
Reviewed-by: default avatarJann Horn <jannh@google.com>
Reviewed-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
parent 66e4c2b9
This diff is collapsed.
...@@ -61,6 +61,6 @@ extern int devm_hwrng_register(struct device *dev, struct hwrng *rng); ...@@ -61,6 +61,6 @@ extern int devm_hwrng_register(struct device *dev, struct hwrng *rng);
extern void hwrng_unregister(struct hwrng *rng); extern void hwrng_unregister(struct hwrng *rng);
extern void devm_hwrng_unregister(struct device *dve, struct hwrng *rng); extern void devm_hwrng_unregister(struct device *dve, struct hwrng *rng);
/** Feed random bits into the pool. */ /** Feed random bits into the pool. */
extern void add_hwgenerator_randomness(const char *buffer, size_t count, size_t entropy); extern void add_hwgenerator_randomness(const void *buffer, size_t count, size_t entropy);
#endif /* LINUX_HWRANDOM_H_ */ #endif /* LINUX_HWRANDOM_H_ */
...@@ -20,8 +20,8 @@ struct random_ready_callback { ...@@ -20,8 +20,8 @@ struct random_ready_callback {
struct module *owner; struct module *owner;
}; };
extern void add_device_randomness(const void *, unsigned int); extern void add_device_randomness(const void *, size_t);
extern void add_bootloader_randomness(const void *, unsigned int); extern void add_bootloader_randomness(const void *, size_t);
#if defined(LATENT_ENTROPY_PLUGIN) && !defined(__CHECKER__) #if defined(LATENT_ENTROPY_PLUGIN) && !defined(__CHECKER__)
static inline void add_latent_entropy(void) static inline void add_latent_entropy(void)
...@@ -37,13 +37,13 @@ extern void add_input_randomness(unsigned int type, unsigned int code, ...@@ -37,13 +37,13 @@ extern void add_input_randomness(unsigned int type, unsigned int code,
unsigned int value) __latent_entropy; unsigned int value) __latent_entropy;
extern void add_interrupt_randomness(int irq) __latent_entropy; extern void add_interrupt_randomness(int irq) __latent_entropy;
extern void get_random_bytes(void *buf, int nbytes); extern void get_random_bytes(void *buf, size_t nbytes);
extern int wait_for_random_bytes(void); extern int wait_for_random_bytes(void);
extern int __init rand_initialize(void); extern int __init rand_initialize(void);
extern bool rng_is_initialized(void); extern bool rng_is_initialized(void);
extern int add_random_ready_callback(struct random_ready_callback *rdy); extern int add_random_ready_callback(struct random_ready_callback *rdy);
extern void del_random_ready_callback(struct random_ready_callback *rdy); extern void del_random_ready_callback(struct random_ready_callback *rdy);
extern int __must_check get_random_bytes_arch(void *buf, int nbytes); extern size_t __must_check get_random_bytes_arch(void *buf, size_t nbytes);
#ifndef MODULE #ifndef MODULE
extern const struct file_operations random_fops, urandom_fops; extern const struct file_operations random_fops, urandom_fops;
...@@ -87,7 +87,7 @@ static inline unsigned long get_random_canary(void) ...@@ -87,7 +87,7 @@ static inline unsigned long get_random_canary(void)
/* Calls wait_for_random_bytes() and then calls get_random_bytes(buf, nbytes). /* Calls wait_for_random_bytes() and then calls get_random_bytes(buf, nbytes).
* Returns the result of the call to wait_for_random_bytes. */ * Returns the result of the call to wait_for_random_bytes. */
static inline int get_random_bytes_wait(void *buf, int nbytes) static inline int get_random_bytes_wait(void *buf, size_t nbytes)
{ {
int ret = wait_for_random_bytes(); int ret = wait_for_random_bytes();
get_random_bytes(buf, nbytes); get_random_bytes(buf, nbytes);
......
...@@ -9,13 +9,13 @@ ...@@ -9,13 +9,13 @@
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
TRACE_EVENT(add_device_randomness, TRACE_EVENT(add_device_randomness,
TP_PROTO(int bytes, unsigned long IP), TP_PROTO(size_t bytes, unsigned long IP),
TP_ARGS(bytes, IP), TP_ARGS(bytes, IP),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, bytes ) __field(size_t, bytes )
__field(unsigned long, IP ) __field(unsigned long, IP )
), ),
TP_fast_assign( TP_fast_assign(
...@@ -23,18 +23,18 @@ TRACE_EVENT(add_device_randomness, ...@@ -23,18 +23,18 @@ TRACE_EVENT(add_device_randomness,
__entry->IP = IP; __entry->IP = IP;
), ),
TP_printk("bytes %d caller %pS", TP_printk("bytes %zu caller %pS",
__entry->bytes, (void *)__entry->IP) __entry->bytes, (void *)__entry->IP)
); );
DECLARE_EVENT_CLASS(random__mix_pool_bytes, DECLARE_EVENT_CLASS(random__mix_pool_bytes,
TP_PROTO(int bytes, unsigned long IP), TP_PROTO(size_t bytes, unsigned long IP),
TP_ARGS(bytes, IP), TP_ARGS(bytes, IP),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, bytes ) __field(size_t, bytes )
__field(unsigned long, IP ) __field(unsigned long, IP )
), ),
TP_fast_assign( TP_fast_assign(
...@@ -42,12 +42,12 @@ DECLARE_EVENT_CLASS(random__mix_pool_bytes, ...@@ -42,12 +42,12 @@ DECLARE_EVENT_CLASS(random__mix_pool_bytes,
__entry->IP = IP; __entry->IP = IP;
), ),
TP_printk("input pool: bytes %d caller %pS", TP_printk("input pool: bytes %zu caller %pS",
__entry->bytes, (void *)__entry->IP) __entry->bytes, (void *)__entry->IP)
); );
DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes, DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes,
TP_PROTO(int bytes, unsigned long IP), TP_PROTO(size_t bytes, unsigned long IP),
TP_ARGS(bytes, IP) TP_ARGS(bytes, IP)
); );
...@@ -59,13 +59,13 @@ DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock, ...@@ -59,13 +59,13 @@ DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock,
); );
TRACE_EVENT(credit_entropy_bits, TRACE_EVENT(credit_entropy_bits,
TP_PROTO(int bits, int entropy_count, unsigned long IP), TP_PROTO(size_t bits, size_t entropy_count, unsigned long IP),
TP_ARGS(bits, entropy_count, IP), TP_ARGS(bits, entropy_count, IP),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, bits ) __field(size_t, bits )
__field( int, entropy_count ) __field(size_t, entropy_count )
__field(unsigned long, IP ) __field(unsigned long, IP )
), ),
...@@ -75,34 +75,34 @@ TRACE_EVENT(credit_entropy_bits, ...@@ -75,34 +75,34 @@ TRACE_EVENT(credit_entropy_bits,
__entry->IP = IP; __entry->IP = IP;
), ),
TP_printk("input pool: bits %d entropy_count %d caller %pS", TP_printk("input pool: bits %zu entropy_count %zu caller %pS",
__entry->bits, __entry->entropy_count, (void *)__entry->IP) __entry->bits, __entry->entropy_count, (void *)__entry->IP)
); );
TRACE_EVENT(add_input_randomness, TRACE_EVENT(add_input_randomness,
TP_PROTO(int input_bits), TP_PROTO(size_t input_bits),
TP_ARGS(input_bits), TP_ARGS(input_bits),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, input_bits ) __field(size_t, input_bits )
), ),
TP_fast_assign( TP_fast_assign(
__entry->input_bits = input_bits; __entry->input_bits = input_bits;
), ),
TP_printk("input_pool_bits %d", __entry->input_bits) TP_printk("input_pool_bits %zu", __entry->input_bits)
); );
TRACE_EVENT(add_disk_randomness, TRACE_EVENT(add_disk_randomness,
TP_PROTO(dev_t dev, int input_bits), TP_PROTO(dev_t dev, size_t input_bits),
TP_ARGS(dev, input_bits), TP_ARGS(dev, input_bits),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( dev_t, dev ) __field(dev_t, dev )
__field( int, input_bits ) __field(size_t, input_bits )
), ),
TP_fast_assign( TP_fast_assign(
...@@ -110,17 +110,17 @@ TRACE_EVENT(add_disk_randomness, ...@@ -110,17 +110,17 @@ TRACE_EVENT(add_disk_randomness,
__entry->input_bits = input_bits; __entry->input_bits = input_bits;
), ),
TP_printk("dev %d,%d input_pool_bits %d", MAJOR(__entry->dev), TP_printk("dev %d,%d input_pool_bits %zu", MAJOR(__entry->dev),
MINOR(__entry->dev), __entry->input_bits) MINOR(__entry->dev), __entry->input_bits)
); );
DECLARE_EVENT_CLASS(random__get_random_bytes, DECLARE_EVENT_CLASS(random__get_random_bytes,
TP_PROTO(int nbytes, unsigned long IP), TP_PROTO(size_t nbytes, unsigned long IP),
TP_ARGS(nbytes, IP), TP_ARGS(nbytes, IP),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, nbytes ) __field(size_t, nbytes )
__field(unsigned long, IP ) __field(unsigned long, IP )
), ),
...@@ -129,29 +129,29 @@ DECLARE_EVENT_CLASS(random__get_random_bytes, ...@@ -129,29 +129,29 @@ DECLARE_EVENT_CLASS(random__get_random_bytes,
__entry->IP = IP; __entry->IP = IP;
), ),
TP_printk("nbytes %d caller %pS", __entry->nbytes, (void *)__entry->IP) TP_printk("nbytes %zu caller %pS", __entry->nbytes, (void *)__entry->IP)
); );
DEFINE_EVENT(random__get_random_bytes, get_random_bytes, DEFINE_EVENT(random__get_random_bytes, get_random_bytes,
TP_PROTO(int nbytes, unsigned long IP), TP_PROTO(size_t nbytes, unsigned long IP),
TP_ARGS(nbytes, IP) TP_ARGS(nbytes, IP)
); );
DEFINE_EVENT(random__get_random_bytes, get_random_bytes_arch, DEFINE_EVENT(random__get_random_bytes, get_random_bytes_arch,
TP_PROTO(int nbytes, unsigned long IP), TP_PROTO(size_t nbytes, unsigned long IP),
TP_ARGS(nbytes, IP) TP_ARGS(nbytes, IP)
); );
DECLARE_EVENT_CLASS(random__extract_entropy, DECLARE_EVENT_CLASS(random__extract_entropy,
TP_PROTO(int nbytes, int entropy_count), TP_PROTO(size_t nbytes, size_t entropy_count),
TP_ARGS(nbytes, entropy_count), TP_ARGS(nbytes, entropy_count),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, nbytes ) __field( size_t, nbytes )
__field( int, entropy_count ) __field( size_t, entropy_count )
), ),
TP_fast_assign( TP_fast_assign(
...@@ -159,37 +159,34 @@ DECLARE_EVENT_CLASS(random__extract_entropy, ...@@ -159,37 +159,34 @@ DECLARE_EVENT_CLASS(random__extract_entropy,
__entry->entropy_count = entropy_count; __entry->entropy_count = entropy_count;
), ),
TP_printk("input pool: nbytes %d entropy_count %d", TP_printk("input pool: nbytes %zu entropy_count %zu",
__entry->nbytes, __entry->entropy_count) __entry->nbytes, __entry->entropy_count)
); );
DEFINE_EVENT(random__extract_entropy, extract_entropy, DEFINE_EVENT(random__extract_entropy, extract_entropy,
TP_PROTO(int nbytes, int entropy_count), TP_PROTO(size_t nbytes, size_t entropy_count),
TP_ARGS(nbytes, entropy_count) TP_ARGS(nbytes, entropy_count)
); );
TRACE_EVENT(urandom_read, TRACE_EVENT(urandom_read,
TP_PROTO(int got_bits, int pool_left, int input_left), TP_PROTO(size_t nbytes, size_t entropy_count),
TP_ARGS(got_bits, pool_left, input_left), TP_ARGS(nbytes, entropy_count),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( int, got_bits ) __field( size_t, nbytes )
__field( int, pool_left ) __field( size_t, entropy_count )
__field( int, input_left )
), ),
TP_fast_assign( TP_fast_assign(
__entry->got_bits = got_bits; __entry->nbytes = nbytes;
__entry->pool_left = pool_left; __entry->entropy_count = entropy_count;
__entry->input_left = input_left;
), ),
TP_printk("got_bits %d nonblocking_pool_entropy_left %d " TP_printk("reading: nbytes %zu entropy_count %zu",
"input_entropy_left %d", __entry->got_bits, __entry->nbytes, __entry->entropy_count)
__entry->pool_left, __entry->input_left)
); );
TRACE_EVENT(prandom_u32, TRACE_EVENT(prandom_u32,
......
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