On Thu, Mar 07, 2024 at 12:10:34PM +0100, Arnd Bergmann wrote: > There is not even any attempt to use the most random bits of > the cycle counter, as both the high 22 to 24 bits get masked > out (to keep the wasted stack space small) and the low 3 or 4 > bits get ignored because of stack alignment. If there was > any desire to make it more random, a trivial improvement > would be: > > +++ b/include/linux/randomize_kstack.h > @@ -80,7 +80,7 @@ DECLARE_PER_CPU(u32, kstack_offset); > if (static_branch_maybe(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, \ > &randomize_kstack_offset)) { \ > u32 offset = raw_cpu_read(kstack_offset); \ > - offset ^= (rand); \ > + offset = ror32(offset, 5) & (rand); \
Shouldn't this stay ^ instead of & ? > raw_cpu_write(kstack_offset, offset); \ > } \ > } while (0) But yeah, we should likely make this change regardless. > My impression is that is is already bordering on becoming > a "bespoke rng" implementation that Jason was objecting to, > so the current version is intentionally left weak in order > to not even give the appearance of being a security relevant > feature. I don't think it's bad to make a trivial improvement to entropy diffusion. -- Kees Cook