Skip to content

Commit e424e94

Browse files
crassDaniel Kiper
authored and
Daniel Kiper
committed
efi: Initialize canary to non-zero value
The canary, __stack_chk_guard, is in the BSS and so will get initialized to zero if it is not explicitly initialized. If the UEFI firmware does not support the RNG protocol, then the canary will not be randomized and will be zero. This seems like a possibly easier value to write by an attacker. Initialize canary to static random bytes, so that it is still random when there is no RNG protocol. Set at least one byte to NUL to protect against string buffer overflow attacks [1]. Code that writes NUL terminated strings will terminate when a NUL is encountered in the input byte stream. So the attacker will not be able to forge the canary by including it in the input stream without terminating the string operation and thus limiting the stack corruption. [1] https://www.sans.org/blog/stack-canaries-gingerly-sidestepping-the-cage/ Signed-off-by: Glenn Washburn <[email protected]> Reviewed-by: Daniel Kiper <[email protected]>
1 parent 7c8ae7d commit e424e94

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

grub-core/kern/efi/init.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ static grub_guid_t rng_protocol_guid = GRUB_EFI_RNG_PROTOCOL_GUID;
4545
*/
4646
static grub_efi_uint8_t stack_chk_guard_buf[32];
4747

48-
grub_addr_t __stack_chk_guard;
48+
/* Initialize canary in case there is no RNG protocol. */
49+
grub_addr_t __stack_chk_guard = (grub_addr_t) 0x00f2b7e2f193b25c;
4950

5051
void __attribute__ ((noreturn))
5152
__stack_chk_fail (void)

0 commit comments

Comments
 (0)