summaryrefslogtreecommitdiffstats
path: root/MdePkg
diff options
context:
space:
mode:
authorPierre Gondois <pierre.gondois@arm.com>2023-08-11 16:33:05 +0200
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-09-08 09:48:55 +0000
commitbd1f0eecc1dfe51ba20161bef8860d12392006bd (patch)
tree076b7ade798e88a6205b56fb426341dad2d03e21 /MdePkg
parent65b5dd828ef2ea5056031b239a4e7a6642f771a3 (diff)
downloadedk2-bd1f0eecc1dfe51ba20161bef8860d12392006bd.tar.gz
edk2-bd1f0eecc1dfe51ba20161bef8860d12392006bd.tar.bz2
edk2-bd1f0eecc1dfe51ba20161bef8860d12392006bd.zip
MdePkg/DxeRngLib: Request raw algorithm instead of default
The DxeRngLib tries to generate a random number using the 3 NIST SP 800-90 compliant DRBG algorithms, i.e. 256-bits CTR, HASH and HMAC. If none of the call is successful, the fallback option is the default RNG algorithm of the EFI_RNG_PROTOCOL. This default algorithm might be an unsafe implementation. Try requesting the Raw algorithm before requesting the default one. Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Acked-by: Ard Biesheuvel <ardb@kernel.org> Tested-by: Kun Qin <kun.qin@microsoft.com>
Diffstat (limited to 'MdePkg')
-rw-r--r--MdePkg/Library/DxeRngLib/DxeRngLib.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/MdePkg/Library/DxeRngLib/DxeRngLib.c b/MdePkg/Library/DxeRngLib/DxeRngLib.c
index 46aea51592..a01b66ad7d 100644
--- a/MdePkg/Library/DxeRngLib/DxeRngLib.c
+++ b/MdePkg/Library/DxeRngLib/DxeRngLib.c
@@ -65,9 +65,15 @@ GenerateRandomNumberViaNist800Algorithm (
return Status;
}
+ Status = RngProtocol->GetRNG (RngProtocol, &gEfiRngAlgorithmRaw, BufferSize, Buffer);
+ DEBUG ((DEBUG_INFO, "%a: GetRNG algorithm Raw - Status = %r\n", __func__, Status));
+ if (!EFI_ERROR (Status)) {
+ return Status;
+ }
+
// If all the other methods have failed, use the default method from the RngProtocol
Status = RngProtocol->GetRNG (RngProtocol, NULL, BufferSize, Buffer);
- DEBUG ((DEBUG_INFO, "%a: GetRNG algorithm Hash-256 - Status = %r\n", __func__, Status));
+ DEBUG ((DEBUG_INFO, "%a: GetRNG algorithm default - Status = %r\n", __func__, Status));
if (!EFI_ERROR (Status)) {
return Status;
}