From e58a49190010dfe2b205c57f2a76c1d88a1ce224 Mon Sep 17 00:00:00 2001 From: Alberto Escolar Piedras Date: Tue, 3 Sep 2024 17:52:04 +0200 Subject: [PATCH] entropy: native_posix: Add kconfig to not seed by default Provide a new kconfig option which can be used to disable the default seeding of the host standard library random generator by this driver. This allows some other component to do so without this component default initialization interfering. Signed-off-by: Alberto Escolar Piedras --- drivers/entropy/Kconfig.native_posix | 9 +++++++++ drivers/entropy/fake_entropy_native_posix.c | 14 +++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) 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)" },