summaryrefslogtreecommitdiffstats
path: root/src/interface/efi
diff options
context:
space:
mode:
authorMichael Brown2018-03-12 11:55:28 +0100
committerMichael Brown2018-03-12 12:02:19 +0100
commitd8c500b7945e57023dde5bd0be2b0e40963315d9 (patch)
treee1303ba73b7dcf7600e3d96b57d4c143d4ea1cc5 /src/interface/efi
parent[iscsi] Parse IPv6 address in root path (diff)
downloadipxe-d8c500b7945e57023dde5bd0be2b0e40963315d9.tar.gz
ipxe-d8c500b7945e57023dde5bd0be2b0e40963315d9.tar.xz
ipxe-d8c500b7945e57023dde5bd0be2b0e40963315d9.zip
[efi] Drop to TPL_APPLICATION when gathering entropy
Commit c89a446 ("[efi] Run at TPL_CALLBACK to protect against UEFI timers") introduced a regression in the EFI entropy gathering code. When the EFI_RNG_PROTOCOL is not present, we fall back to using timer interrupts (as for the BIOS build). Since timer interrupts are disabled at TPL_CALLBACK, WaitForEvent() fails and no entropy can be gathered. Fix by dropping to TPL_APPLICATION while entropy gathering is enabled. Reported-by: Andreas Hammarskjöld <junior@2PintSoftware.com> Tested-by: Andreas Hammarskjöld <junior@2PintSoftware.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/interface/efi')
-rw-r--r--src/interface/efi/efi_entropy.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/interface/efi/efi_entropy.c b/src/interface/efi/efi_entropy.c
index 881c4c9a..2a2fc905 100644
--- a/src/interface/efi/efi_entropy.c
+++ b/src/interface/efi/efi_entropy.c
@@ -79,6 +79,9 @@ static int efi_entropy_enable ( void ) {
DBGC ( &tick, "ENTROPY %s RNG protocol\n",
( efirng ? "has" : "has no" ) );
+ /* Drop to TPL_APPLICATION to allow timer tick event to take place */
+ bs->RestoreTPL ( TPL_APPLICATION );
+
/* Create timer tick event */
if ( ( efirc = bs->CreateEvent ( EVT_TIMER, TPL_NOTIFY, NULL, NULL,
&tick ) ) != 0 ) {
@@ -100,6 +103,9 @@ static void efi_entropy_disable ( void ) {
/* Close timer tick event */
bs->CloseEvent ( tick );
+
+ /* Return to TPL_CALLBACK */
+ bs->RaiseTPL ( TPL_CALLBACK );
}
/**