On 06.12.2024 05:46, Volodymyr Babchuk wrote: > So, apart from already present > > static always_inline void boot_stack_chk_guard_setup(void); > > I did this: > > /* > * Initial value is chosen by fair dice roll. > * It will be updated during boot process. > */ > #if BITS_PER_LONG == 32 > unsigned long __ro_after_init __stack_chk_guard = 0xdd2cc927;
At least this and ... > #else > unsigned long __ro_after_init __stack_chk_guard = 0x2d853605a4d9a09c; > #endif > > /* This function should be called from ASM only */ > void __init asmlinkage boot_stack_chk_guard_setup_early(void) > { > /* > * Linear congruent generator. Constant is taken from > * Tables Of Linear Congruential Generators > * Of Different Sizes And Good Lattice Structure by Pierre L’Ecuyer > */ > #if BITS_PER_LONG == 32 > const unsigned long a = 2891336453; ... this will need a UL suffix for Misra. Probably best to add UL on all four constants. As to the comment, please adhere to ./CODING_STYLE. > #else > const unsigned long a = 2862933555777941757; > #endif > const unsigned c = 1; I'm having a hard time seeing why this need to be a static variable. Its sole use is ... > unsigned long cycles = get_cycles(); > > if ( !cycles ) > return; > > __stack_chk_guard = cycles * a + c; ... here, where you can as well write a literal 1. Jan