diff --git a/boards/native/nrf_bsim/nrf54l15bsim_nrf54l15_cpuapp_defconfig b/boards/native/nrf_bsim/nrf54l15bsim_nrf54l15_cpuapp_defconfig index 0fde4e01b58..c8f804a2005 100644 --- a/boards/native/nrf_bsim/nrf54l15bsim_nrf54l15_cpuapp_defconfig +++ b/boards/native/nrf_bsim/nrf54l15bsim_nrf54l15_cpuapp_defconfig @@ -6,3 +6,5 @@ CONFIG_NO_OPTIMIZATIONS=y # Start SYSCOUNTER on driver init CONFIG_NRF_GRTC_START_SYSCOUNTER=y + +CONFIG_FAKE_ENTROPY_NATIVE_POSIX_SEED_BY_DEFAULT=n diff --git a/drivers/entropy/Kconfig.native_posix b/drivers/entropy/Kconfig.native_posix index 94fd7300670..39298c444df 100644 --- a/drivers/entropy/Kconfig.native_posix +++ b/drivers/entropy/Kconfig.native_posix @@ -12,3 +12,12 @@ config FAKE_ENTROPY_NATIVE_POSIX not generate real entropy. It actually generates always the same sequence of random numbers if initialized with the same seed. + +config FAKE_ENTROPY_NATIVE_POSIX_SEED_BY_DEFAULT + bool "Seed the generator by default" + default y + depends on FAKE_ENTROPY_NATIVE_POSIX + help + Apply a seed by default, even if the user does not request it through the command line. + Disabling this feature allows some other component to seed the host standard library random + generator without this component's default initialization interfering. diff --git a/drivers/entropy/fake_entropy_native_posix.c b/drivers/entropy/fake_entropy_native_posix.c index ccdd3aa46e5..e9ee4ab9284 100644 --- a/drivers/entropy/fake_entropy_native_posix.c +++ b/drivers/entropy/fake_entropy_native_posix.c @@ -27,6 +27,7 @@ static unsigned int seed = 0x5678; static bool seed_random; +static bool seed_set; static int entropy_native_posix_get_entropy(const struct device *dev, uint8_t *buffer, @@ -69,7 +70,10 @@ static int entropy_native_posix_get_entropy_isr(const struct device *dev, static int entropy_native_posix_init(const struct device *dev) { ARG_UNUSED(dev); - entropy_native_seed(seed, seed_random); + if (seed_set || seed_random || + IS_ENABLED(CONFIG_FAKE_ENTROPY_NATIVE_POSIX_SEED_BY_DEFAULT)) { + entropy_native_seed(seed, seed_random); + } posix_print_warning("WARNING: " "Using a test - not safe - entropy source\n"); return 0; @@ -86,6 +90,13 @@ DEVICE_DT_INST_DEFINE(0, PRE_KERNEL_1, CONFIG_ENTROPY_INIT_PRIORITY, &entropy_native_posix_api_funcs); +static void seed_was_set(char *argv, int offset) +{ + ARG_UNUSED(argv); + ARG_UNUSED(offset); + seed_set = true; +} + static void add_fake_entropy_option(void) { static struct args_struct_t entropy_options[] = { @@ -94,6 +105,7 @@ static void add_fake_entropy_option(void) .name = "r_seed", .type = 'u', .dest = (void *)&seed, + .call_when_found = seed_was_set, .descript = "A 32-bit integer seed value for the entropy device, such as " "97229 (decimal), 0x17BCD (hex), or 0275715 (octal)" }, diff --git a/west.yml b/west.yml index 1da99e5545c..746c8b9655c 100644 --- a/west.yml +++ b/west.yml @@ -295,7 +295,7 @@ manifest: groups: - tools - name: nrf_hw_models - revision: 4b0b020e25dbf1a11ccccf7b7741d6ca991ba9e4 + revision: d2a119a9c7600ce06033a794de042e0ad9a38702 path: modules/bsim_hw_models/nrf_hw_models - name: open-amp revision: da78aea63159771956fe0c9263f2e6985b66e9d5