CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: "Jason A. Donenfeld" <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 6d9bd4ad4ca08b1114e814c2c42383b8b13be631 commit: 6d66882e05cf59a573cf48d16db945ea32c4c6ba [5045/5417] random: ensure mix_interrupt_randomness() is consistent :::::: branch date: 3 hours ago :::::: commit date: 10 hours ago compiler: riscv64-linux-gcc (GCC) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> cppcheck possible warnings: (new ones prefixed by >>, may not real problems) >> drivers/char/random.c:1266:18: warning: Array 'fast_pool->pool[2]' accessed >> at index 2, which is out of bounds. [arrayIndexOutOfBounds] fast_pool->pool[2] ^= regs ? instruction_pointer(regs) : _RET_IP_; ^ drivers/char/random.c:1267:18: warning: Array 'fast_pool->pool[2]' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds] fast_pool->pool[3] ^= get_reg(fast_pool, regs); ^ vim +1266 drivers/char/random.c 08506326bf01385 Jason A. Donenfeld 2022-02-04 1248 703f7066f40599c Sebastian Andrzej Siewior 2021-12-07 1249 void add_interrupt_randomness(int irq) ^1da177e4c3f415 Linus Torvalds 2005-04-16 1250 { 1b2a1a7e8ad1144 Christoph Lameter 2014-08-17 1251 struct fast_pool *fast_pool = this_cpu_ptr(&irq_randomness); 775f4b297b78060 Theodore Ts'o 2012-07-02 1252 struct pt_regs *regs = get_irq_regs(); 775f4b297b78060 Theodore Ts'o 2012-07-02 1253 unsigned long now = jiffies; 655b226470b2295 Theodore Ts'o 2013-09-22 1254 cycles_t cycles = random_get_entropy(); 08506326bf01385 Jason A. Donenfeld 2022-02-04 1255 unsigned int new_count; 655b226470b2295 Theodore Ts'o 2013-09-22 1256 b67959013391e48 Jason A. Donenfeld 2022-02-10 1257 if (cycles == 0) b67959013391e48 Jason A. Donenfeld 2022-02-10 1258 cycles = get_reg(fast_pool, regs); e192be9d9a30555 Theodore Ts'o 2016-06-12 1259 b67959013391e48 Jason A. Donenfeld 2022-02-10 1260 if (sizeof(unsigned long) == 8) { 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1261 fast_pool->pool[0] ^= cycles ^ rol64(now, 32) ^ irq; 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1262 fast_pool->pool[1] ^= regs ? instruction_pointer(regs) : _RET_IP_; b67959013391e48 Jason A. Donenfeld 2022-02-10 1263 } else { 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1264 fast_pool->pool[0] ^= cycles ^ irq; 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1265 fast_pool->pool[1] ^= now; 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 @1266 fast_pool->pool[2] ^= regs ? instruction_pointer(regs) : _RET_IP_; 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1267 fast_pool->pool[3] ^= get_reg(fast_pool, regs); d968978f395468d Jason A. Donenfeld 2022-02-07 1268 } d968978f395468d Jason A. Donenfeld 2022-02-07 1269 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1270 fast_mix((u32 *)fast_pool->pool); 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1271 new_count = (unsigned int)atomic_inc_return_acquire(&fast_pool->count); d968978f395468d Jason A. Donenfeld 2022-02-07 1272 b67959013391e48 Jason A. Donenfeld 2022-02-10 1273 if (unlikely(crng_init == 0)) { b67959013391e48 Jason A. Donenfeld 2022-02-10 1274 if (new_count >= 64 && 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1275 crng_fast_load(fast_pool->pool, sizeof(fast_pool->pool)) > 0) { 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1276 atomic_set(&fast_pool->count, 0); b67959013391e48 Jason A. Donenfeld 2022-02-10 1277 fast_pool->last = now; b67959013391e48 Jason A. Donenfeld 2022-02-10 1278 b67959013391e48 Jason A. Donenfeld 2022-02-10 1279 /* b67959013391e48 Jason A. Donenfeld 2022-02-10 1280 * Technically this call means that we're using a spinlock_t b67959013391e48 Jason A. Donenfeld 2022-02-10 1281 * in the IRQ handler, which isn't terrific for PREEMPT_RT. b67959013391e48 Jason A. Donenfeld 2022-02-10 1282 * However, this only happens during boot, and then never b67959013391e48 Jason A. Donenfeld 2022-02-10 1283 * again, so we live with it. b67959013391e48 Jason A. Donenfeld 2022-02-10 1284 */ 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1285 mix_pool_bytes(&fast_pool->pool, sizeof(fast_pool->pool)); b67959013391e48 Jason A. Donenfeld 2022-02-10 1286 } b67959013391e48 Jason A. Donenfeld 2022-02-10 1287 return; c2557a303ab6712 Theodore Ts'o 2012-07-05 1288 } eecabf567422eda Theodore Ts'o 2017-06-08 1289 b67959013391e48 Jason A. Donenfeld 2022-02-10 1290 if (new_count & FAST_POOL_MIX_INFLIGHT) b67959013391e48 Jason A. Donenfeld 2022-02-10 1291 return; eecabf567422eda Theodore Ts'o 2017-06-08 1292 b67959013391e48 Jason A. Donenfeld 2022-02-10 1293 if (new_count < 64 && !time_after(now, fast_pool->last + HZ)) b67959013391e48 Jason A. Donenfeld 2022-02-10 1294 return; b67959013391e48 Jason A. Donenfeld 2022-02-10 1295 b67959013391e48 Jason A. Donenfeld 2022-02-10 1296 if (unlikely(!fast_pool->mix.func)) b67959013391e48 Jason A. Donenfeld 2022-02-10 1297 INIT_WORK(&fast_pool->mix, mix_interrupt_randomness); 6d66882e05cf59a Jason A. Donenfeld 2022-02-11 1298 atomic_or(FAST_POOL_MIX_INFLIGHT, &fast_pool->count); b67959013391e48 Jason A. Donenfeld 2022-02-10 1299 queue_work_on(raw_smp_processor_id(), system_highpri_wq, &fast_pool->mix); eecabf567422eda Theodore Ts'o 2017-06-08 1300 } b67959013391e48 Jason A. Donenfeld 2022-02-10 1301 EXPORT_SYMBOL_GPL(add_interrupt_randomness); c2557a303ab6712 Theodore Ts'o 2012-07-05 1302 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
