diff mbox series

[XEN,v2] libxl/arm: provide guests with random seed

Message ID 20210527085233.69917-1-Sergiy_Kibrik@epam.com (mailing list archive)
State Superseded
Headers show
Series [XEN,v2] libxl/arm: provide guests with random seed | expand

Commit Message

Sergiy Kibrik May 27, 2021, 8:52 a.m. UTC
Pass 128 bytes of random seed via FDT, so that guests' CRNGs are better seeded
early at boot. This is larger than ChaCha20 key size of 32, so each byte of
CRNG state will be mixed 4 times using this seed. There does not seem to be
advantage in larger seed though.

Depending on its configuration Linux can use the seed as device randomness
or to just quickly initialize CRNG.
In either case this will provide extra randomness to further harden CRNG.

CC: Julien Grall <julien@xen.org>
Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
---
 tools/libxl/libxl_arm.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Julien Grall June 3, 2021, 1:08 p.m. UTC | #1
Hi,

On 27/05/2021 09:52, Sergiy Kibrik wrote:
> Pass 128 bytes of random seed via FDT, so that guests' CRNGs are better seeded
> early at boot. This is larger than ChaCha20 key size of 32, so each byte of
> CRNG state will be mixed 4 times using this seed. There does not seem to be
> advantage in larger seed though.
> 
> Depending on its configuration Linux can use the seed as device randomness
> or to just quickly initialize CRNG.
> In either case this will provide extra randomness to further harden CRNG.
> 
> CC: Julien Grall <julien@xen.org>
> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

Ian, Wei, can we get an ack for this patch?

Cheers,
Julien Grall June 30, 2021, 10:12 a.m. UTC | #2
On 03/06/2021 14:08, Julien Grall wrote:
> Hi,
> 
> On 27/05/2021 09:52, Sergiy Kibrik wrote:
>> Pass 128 bytes of random seed via FDT, so that guests' CRNGs are 
>> better seeded
>> early at boot. This is larger than ChaCha20 key size of 32, so each 
>> byte of
>> CRNG state will be mixed 4 times using this seed. There does not seem 
>> to be
>> advantage in larger seed though.
>>
>> Depending on its configuration Linux can use the seed as device 
>> randomness
>> or to just quickly initialize CRNG.
>> In either case this will provide extra randomness to further harden CRNG.
>>
>> CC: Julien Grall <julien@xen.org>
>> Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@epam.com>
> 
> Reviewed-by: Julien Grall <jgrall@amazon.com>
> 
> Ian, Wei, can we get an ack for this patch?

This has been sitting on the ML for quite a while. I was going to commit 
it as this looks uncontroversial but the patch doesn't apply on the 
lastest Xen (tools/libxl was moved in tools/libs/light).

@Sergiy, would you be able to rebase the patch?

Cheers,
Sergiy Kibrik June 30, 2021, 11:52 a.m. UTC | #3
> On 03/06/2021 14:08, Julien Grall wrote:
[..]
> 
> This has been sitting on the ML for quite a while. I was going to commit it as
> this looks uncontroversial but the patch doesn't apply on the lastest Xen
> (tools/libxl was moved in tools/libs/light).
> 
> @Sergiy, would you be able to rebase the patch?
> 

Sure, I'll post rebased version.

--
Regards,
  Sergiy
diff mbox series

Patch

diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
index 34f8a29056..d3a4a72fb7 100644
--- a/tools/libxl/libxl_arm.c
+++ b/tools/libxl/libxl_arm.c
@@ -304,6 +304,9 @@  static int make_chosen_node(libxl__gc *gc, void *fdt, bool ramdisk,
 {
     int res;
 
+    /* 1024 bit enough to mix Linux CRNG state several times */
+    uint8_t seed[128];
+
     /* See linux Documentation/devicetree/... */
     res = fdt_begin_node(fdt, "chosen");
     if (res) return res;
@@ -342,6 +345,11 @@  static int make_chosen_node(libxl__gc *gc, void *fdt, bool ramdisk,
         if (res) return res;
     }
 
+    res = libxl__random_bytes(gc, seed, sizeof(seed));
+    if (res) return res;
+    res = fdt_property(fdt, "rng-seed", seed, sizeof(seed));
+    if (res) return res;
+
     res = fdt_end_node(fdt);
     if (res) return res;