Messages in this thread | | | Date | Tue, 29 Nov 2022 20:55:48 -0800 | From | Eric Biggers <> | Subject | Re: [PATCH] random: align entropy_timer_state to cache line |
| |
Hi Jason,
On Wed, Nov 30, 2022 at 03:08:15AM +0100, Jason A. Donenfeld wrote: > The theory behind the jitter dance is that multiple things are poking at > the same cache line. This only works, however, if those things are > actually all in the same cache line. Ensure this is the case by aligning > the struct on the stack to the cache line size. > > On x86, this indeed aligns the stack struct: > > 000000000000000c <try_to_generate_entropy>: > { > c: 55 push %rbp > - d: 53 push %rbx > - e: 48 83 ec 38 sub $0x38,%rsp > + d: 48 89 e5 mov %rsp,%rbp > + 10: 41 54 push %r12 > + 12: 53 push %rbx > + 13: 48 83 e4 c0 and $0xffffffffffffffc0,%rsp > + 17: 48 83 ec 40 sub $0x40,%rsp > > Cc: Sultan Alsawaf <sultan@kerneltoast.com> > Fixes: 50ee7529ec45 ("random: try to actively add entropy rather than passively wait for it") > Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> > --- > drivers/char/random.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/char/random.c b/drivers/char/random.c > index 67558b95d531..2494e08c76d8 100644 > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -1262,7 +1262,7 @@ static void __cold entropy_timer(struct timer_list *timer) > static void __cold try_to_generate_entropy(void) > { > enum { NUM_TRIAL_SAMPLES = 8192, MAX_SAMPLES_PER_BIT = HZ / 15 }; > - struct entropy_timer_state stack; > + struct entropy_timer_state stack ____cacheline_aligned;
Several years ago, there was a whole thing about how __attribute__((aligned)) to more than 8 bytes doesn't actually work on stack variables in the kernel on x86, because the kernel only keeps the stack 8-byte aligned but gcc assumes it is 16-byte aligned. See https://lore.kernel.org/linux-crypto/20170110143340.GA3787@gondor.apana.org.au/T/#t
IIRC, nothing was done about it at the time.
Has that been resolved in the intervening years?
- Eric
| |