Hi Mattias, On Wed, 16 Dec 2020 at 09:28, <matthias....@kernel.org> wrote: > > From: Matthias Brugger <mbrug...@suse.com> > > When calculating a random UUID we use a weak seed. > Use a RNG device if present to increase entropy. > > Signed-off-by: Matthias Brugger <mbrug...@suse.com> > > --- > > Changes in v2: > - fix dm_rng_read() parameters > - add missing include > > lib/uuid.c | 21 ++++++++++++++++++--- > 1 file changed, 18 insertions(+), 3 deletions(-) > > diff --git a/lib/uuid.c b/lib/uuid.c > index e62d5ca264..e3487380c3 100644 > --- a/lib/uuid.c > +++ b/lib/uuid.c > @@ -15,6 +15,8 @@ > #include <asm/io.h> > #include <part_efi.h> > #include <malloc.h> > +#include <dm/uclass.h> > +#include <rng.h> > > /* > * UUID - Universally Unique IDentifier - 128 bits unique number. > @@ -249,9 +251,22 @@ void gen_rand_uuid(unsigned char *uuid_bin) > { > u32 ptr[4]; > struct uuid *uuid = (struct uuid *)ptr; > - int i; > - > - srand(get_ticks() + rand()); > + int i, ret; > + struct udevice *devp; > + u8 randv = 0; > + > +#if defined(CONFIG_DM_RNG)
This seems a little backwards to me. The caller should request a RNG device, getting either a hardware one or a software one, and then call the uclass method to get the uuid. > + ret = uclass_get_device(UCLASS_RNG, 0, &devp); > + if (ret) { > + ret = dm_rng_read(devp, &randv, sizeof(randv)); > + if (ret < 0) > + randv = 0; > + } > + if (randv) > + srand(randv); > + else > +#endif > + srand(get_ticks() + rand()); > > /* Set all fields randomly */ > for (i = 0; i < 4; i++) > -- > 2.29.2 > Regards, Simon