diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2022-02-22 13:46:10 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2022-02-24 16:32:26 +0100 |
commit | da3951ebdcd1cb1d5c750e08cd05aee7b0c04d9a (patch) | |
tree | 08338c56e7a8ac7901b9d85fe3084e325c9e623f /drivers/char/random.c | |
parent | 3191dd5a1179ef0fad5a050a1702ae98b6251e8f (diff) | |
download | lwn-da3951ebdcd1cb1d5c750e08cd05aee7b0c04d9a.tar.gz lwn-da3951ebdcd1cb1d5c750e08cd05aee7b0c04d9a.zip |
random: round-robin registers as ulong, not u32
When the interrupt handler does not have a valid cycle counter, it calls
get_reg() to read a register from the irq stack, in round-robin.
Currently it does this assuming that registers are 32-bit. This is
_probably_ the case, and probably all platforms without cycle counters
are in fact 32-bit platforms. But maybe not, and either way, it's not
quite correct. This commit fixes that to deal with `unsigned long`
rather than `u32`.
Cc: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'drivers/char/random.c')
-rw-r--r-- | drivers/char/random.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c index d73a75cbe82d..a4dedeea35e9 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -1261,15 +1261,15 @@ int random_online_cpu(unsigned int cpu) } #endif -static u32 get_reg(struct fast_pool *f, struct pt_regs *regs) +static unsigned long get_reg(struct fast_pool *f, struct pt_regs *regs) { - u32 *ptr = (u32 *)regs; + unsigned long *ptr = (unsigned long *)regs; unsigned int idx; if (regs == NULL) return 0; idx = READ_ONCE(f->reg_idx); - if (idx >= sizeof(struct pt_regs) / sizeof(u32)) + if (idx >= sizeof(struct pt_regs) / sizeof(unsigned long)) idx = 0; ptr += idx++; WRITE_ONCE(f->reg_idx, idx); |