kernel: thread: Fix randomness problem with stack pointer random
In some platforms the size of size_t can be different of 4 bytes. Use sys_rand_get to proper fill this variable. Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
This commit is contained in:
parent
8134001148
commit
91fd6d0866
4 changed files with 9 additions and 17 deletions
|
@ -112,7 +112,7 @@ extern void z_smp_init(void);
|
||||||
|
|
||||||
extern void smp_timer_init(void);
|
extern void smp_timer_init(void);
|
||||||
|
|
||||||
extern u32_t z_early_boot_rand32_get(void);
|
extern void z_early_boot_rand_get(u8_t *buf, size_t length);
|
||||||
|
|
||||||
#if CONFIG_STACK_POINTER_RANDOM
|
#if CONFIG_STACK_POINTER_RANDOM
|
||||||
extern int z_stack_adjust_initialized;
|
extern int z_stack_adjust_initialized;
|
||||||
|
|
|
@ -426,7 +426,7 @@ static FUNC_NORETURN void switch_to_main_thread(void)
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MULTITHREADING */
|
#endif /* CONFIG_MULTITHREADING */
|
||||||
|
|
||||||
static void z_early_boot_rand_get(u8_t *buf, size_t length)
|
void z_early_boot_rand_get(u8_t *buf, size_t length)
|
||||||
{
|
{
|
||||||
int n = sizeof(u32_t);
|
int n = sizeof(u32_t);
|
||||||
#ifdef CONFIG_ENTROPY_HAS_DRIVER
|
#ifdef CONFIG_ENTROPY_HAS_DRIVER
|
||||||
|
@ -482,15 +482,6 @@ sys_rand_fallback:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
u32_t z_early_boot_rand32_get(void)
|
|
||||||
{
|
|
||||||
u32_t retval;
|
|
||||||
|
|
||||||
z_early_boot_rand_get((u8_t *)&retval, sizeof(retval));
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @brief Initialize kernel
|
* @brief Initialize kernel
|
||||||
|
|
|
@ -403,9 +403,9 @@ static inline size_t adjust_stack_size(size_t stack_size)
|
||||||
size_t random_val;
|
size_t random_val;
|
||||||
|
|
||||||
if (!z_stack_adjust_initialized) {
|
if (!z_stack_adjust_initialized) {
|
||||||
random_val = z_early_boot_rand32_get();
|
z_early_boot_rand_get((u8_t *)&random_val, sizeof(random_val));
|
||||||
} else {
|
} else {
|
||||||
random_val = sys_rand32_get();
|
sys_rand_get((u8_t *)&random_val, sizeof(random_val));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't need to worry about alignment of the size here,
|
/* Don't need to worry about alignment of the size here,
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This tests the following random number routines:
|
* This tests the following random number routines:
|
||||||
* u32_t z_early_boot_rand32_get(void);
|
* void z_early_boot_rand_get(u8_t *buf, size_t length)
|
||||||
* u32_t sys_rand32_get(void);
|
* u32_t sys_rand32_get(void);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -35,9 +35,10 @@ void test_rand32(void)
|
||||||
u32_t buf[N_VALUES];
|
u32_t buf[N_VALUES];
|
||||||
|
|
||||||
/* Test early boot random number generation function */
|
/* Test early boot random number generation function */
|
||||||
last_gen = z_early_boot_rand32_get();
|
z_early_boot_rand_get((u8_t *)&last_gen, sizeof(last_gen));
|
||||||
zassert_true(last_gen != z_early_boot_rand32_get(),
|
z_early_boot_rand_get((u8_t *)&gen, sizeof(gen));
|
||||||
"z_early_boot_rand32_get failed");
|
zassert_true(last_gen != gen,
|
||||||
|
"z_early_boot_rand_get failed");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test subsequently calls sys_rand32_get(), checking
|
* Test subsequently calls sys_rand32_get(), checking
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue