|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v2 2/4] lib/ukswrand: Add seed generating function
Hey Simon,
Please see my replies inline.
Thanks,
Vlad
On 18.10.2019 15:59, Simon Kuenzer wrote:
> Hey Vlad,
>
> thanks a lot for you work. I have a few comments inline.
>
> Thanks,
>
> Simon
>
> On 16.10.19 17:41, Vlad-Andrei BĂDOIU (78692) wrote:
>> This patch adds a new function, _get_random_seed32 for seed
>> generaton. If the
>> pre-compiled config option is not selected, then rdrand is used on
>> x86 and
>> ukplat_wall_clock on ARM.
>>
>> Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
>> ---
>> lib/ukswrand/Config.uk | 7 +++++++
>> lib/ukswrand/include/uk/swrand.h | 20 ++++++++++++++++++++
>> lib/ukswrand/mwc.c | 2 +-
>> 3 files changed, 28 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/ukswrand/Config.uk b/lib/ukswrand/Config.uk
>> index c58371bb..8db3af03 100644
>> --- a/lib/ukswrand/Config.uk
>> +++ b/lib/ukswrand/Config.uk
>> @@ -14,10 +14,17 @@ config LIBUKSWRAND_MWC
>> Use multiply-with-carry algorithm
>> endchoice
>> +config LIBUKSWRAND_USE_INITIALSEED
>> + bool "Use a pre-compiled seed"
>> + default y
>> +
>> +if LIBUKSWRAND_USE_INITIALSEED
>> config LIBUKSWRAND_INITIALSEED
>> int "Initial random seed"
>> default 23
>
> Hey, I would rather provide a drop-down menu. This is maybe a little
> bit more intuitive to use. How about:
Noted.
>
> choice
> prompt "Initial seed"
> default LIBUKSWRANDR_INITIALSEED_TIME
>
> config LIBUKSWRAND_INITIALSEED_TIME
> bool "Platform timestamp"
>
> config LIBUKSWRAND_INITIALSEED_RDRAND
> depends on ARCH_X86_64 && (MARCH_X86_64_COREI7AVXI)
> bool "`rdrand` instruction"
>
> config LIBUKSWRAND_INITIALSEED_USECONSTANT
> bool "Compiled-in constant"
> endchoice
>
> config LIBUKSWRAND_INITIALSEED_CONSTANT
> int "Initial seed constant"
> depends on LIBUKSWRAND_INITIALSEED_USECONSTANT
> default 23
>
> Also note that rdrand/rdseed is not available on all x86_64 CPUs. On
> Intel it got introduced with Ivy-Bridge, afaik.
Right, would adding a check for the existence of rdrand be all right in
the case of x86?
>
>> +endif
>> +
>> config LIBUKSWRAND_DEVFS
>> bool "Register random and urandom device to devfs"
>> select LIBDEVFS
>> diff --git a/lib/ukswrand/include/uk/swrand.h
>> b/lib/ukswrand/include/uk/swrand.h
>> index 77912182..a3a1e227 100644
>> --- a/lib/ukswrand/include/uk/swrand.h
>> +++ b/lib/ukswrand/include/uk/swrand.h
>> @@ -39,6 +39,7 @@
>> #include <uk/arch/types.h>
>> #include <uk/plat/lcpu.h>
>> #include <uk/config.h>
>> +#include <uk/plat/time.h>
>> #ifdef __cplusplus
>> extern "C" {
>> @@ -53,6 +54,25 @@ extern struct uk_swrand uk_swrand_def;
>> void uk_swrand_init_r(struct uk_swrand *r, __u32 seed);
>> __u32 uk_swrand_randr_r(struct uk_swrand *r);
>> +static inline __u32 _get_random_seed32(void)
>> +{
>> + __u32 val;
>> +
>> +#ifdef CONFIG_LIBUKSWRAND_USE_INITIALSEED
>> + return CONFIG_LIBUKSWRAND_INITIALSEED;
>> +#endif
>> +
>> +#ifdef CONFIG_ARCH_X86_64
>> + asm volatile ("rdrand %%eax;"
>> + : "=a" (val));
>> + return val;
>> +#endif
>> +
>> + /* TODO: Generate the seed randomly on ARM */
>> + val = (__u32)ukplat_wall_clock();
>
> With this code, your implementation is now always using the timestamp.
> I think this was not intended, right? ;-)
Actually yes, I defaulted to ukplat_wall_clock when
CONFIG_LIBUKSWRAND_USE_INITIALSEED is not selected on ARM.
In the case of X86, we end up in one of the two guards. (both of them
return a value)
>
>> + return val;
>> +}
>> +
>> /* Uses the pre-initialized default generator */
>> /* TODO: Add assertion when we can test if we are in interrupt
>> context */
>> /* TODO: Revisit with multi-CPU support */
>> diff --git a/lib/ukswrand/mwc.c b/lib/ukswrand/mwc.c
>> index 820aa2a2..6d785c07 100644
>> --- a/lib/ukswrand/mwc.c
>> +++ b/lib/ukswrand/mwc.c
>> @@ -99,7 +99,7 @@ __u32 uk_swrand_randr_r(struct uk_swrand *r)
>> static void _uk_swrand_ctor(void)
>> {
>> uk_pr_info("Initialize random number generator...\n");
>> - uk_swrand_init_r(&uk_swrand_def, CONFIG_LIBUKSWRAND_INITIALSEED);
>> + uk_swrand_init_r(&uk_swrand_def, _get_random_seed32());
>> }
>> UK_CTOR_FUNC(UK_SWRAND_CTOR_PRIO, _uk_swrand_ctor);
>>
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |