[PATCH v3 6/8] cmd: rng: Add support for selecting RNG device
Sughosh Ganu
sughosh.ganu at linaro.org
Thu Mar 10 13:42:48 CET 2022
hi Simon,
On Wed, 9 Mar 2022 at 21:02, Simon Glass <sjg at chromium.org> wrote:
>
> Hi Sugosh,
>
> On Fri, 4 Mar 2022 at 06:35, Sughosh Ganu <sughosh.ganu at linaro.org> wrote:
> >
> > The 'rng' u-boot command is used for printing a select number of
> > random bytes on the console. Currently, the RNG device from which the
> > random bytes are read is fixed. However, a platform can have multiple
> > RNG devices, one example being qemu, which has a virtio RNG device and
> > the RNG pseudo device through the TPM chip.
> >
> > Extend the 'rng' command so that the user can provide the RNG device
> > number from which the random bytes are to be read. This will be the
> > device index under the RNG uclass.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> > Tested-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> > ---
> >
> > Changes since V2: None
> >
> > cmd/rng.c | 31 +++++++++++++++++++++++--------
> > 1 file changed, 23 insertions(+), 8 deletions(-)
> >
> > diff --git a/cmd/rng.c b/cmd/rng.c
> > index 1ad5a096c0..bb89cfa784 100644
> > --- a/cmd/rng.c
> > +++ b/cmd/rng.c
> > @@ -13,19 +13,34 @@
> >
> > static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
> > {
> > - size_t n = 0x40;
> > + size_t n;
> > struct udevice *dev;
> > void *buf;
> > + int devnum;
> > int ret = CMD_RET_SUCCESS;
> >
> > - if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) {
> > + switch (argc) {
> > + case 1:
> > + devnum = 0;
> > + n = 0x40;
> > + break;
> > + case 2:
> > + devnum = hextoul(argv[1], NULL);
> > + n = 0x40;
> > + break;
> > + case 3:
> > + devnum = hextoul(argv[1], NULL);
> > + n = hextoul(argv[2], NULL);
> > + break;
> > + default:
> > + return CMD_RET_USAGE;
> > + }
> > +
> > + if (uclass_get_device(UCLASS_RNG, devnum, &dev) || !dev) {
>
> Devices are numbered by aliases, so you should use
> uclass_get_device_by_seq() here.
>
> > printf("No RNG device\n");
> > return CMD_RET_FAILURE;
> > }
> >
> > - if (argc >= 2)
> > - n = hextoul(argv[1], NULL);
> > -
> > buf = malloc(n);
>
> No need to malloc(), just set a limit for (say 64) bytes. See how
> cmd_mem.c does it.
These changes were not made as part of this patch. This is already
existing code. I will make the changes that you suggest nonetheless.
Btw, can you please take a look at the v4 patchset for this series.
Thanks.
-sughosh
>
> > if (!buf) {
> > printf("Out of memory\n");
> > @@ -46,12 +61,12 @@ static int do_rng(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
> >
> > #ifdef CONFIG_SYS_LONGHELP
> > static char rng_help_text[] =
> > - "[n]\n"
> > - " - print n random bytes\n";
> > + "[dev [n]]\n"
> > + " - print n random bytes read from dev\n";
> > #endif
> >
> > U_BOOT_CMD(
> > - rng, 2, 0, do_rng,
> > + rng, 3, 0, do_rng,
> > "print bytes from the hardware random number generator",
> > rng_help_text
> > );
> > --
> > 2.25.1
> >
>
> Regards,
> Simon
More information about the U-Boot
mailing list