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