summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/stackprot.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/stackprot.c b/lib/stackprot.c
index c1cc19aadd..7a8d0a4c10 100644
--- a/lib/stackprot.c
+++ b/lib/stackprot.c
@@ -16,7 +16,7 @@
void __stack_chk_fail(void);
-unsigned long __stack_chk_guard = (unsigned long)(0xfeedf00ddeadbeef & ~0UL);
+volatile ulong __stack_chk_guard = (ulong)(0xfeedf00ddeadbeef & ~0UL);
/*
* Called when gcc's -fstack-protector feature is used, and
@@ -30,11 +30,15 @@ EXPORT_SYMBOL(__stack_chk_fail);
static __no_stack_protector int stackprot_randomize_guard(void)
{
+ ulong chk_guard;
int ret;
- ret = get_crypto_bytes(&__stack_chk_guard, sizeof(__stack_chk_guard));
+ ret = get_crypto_bytes(&chk_guard, sizeof(chk_guard));
if (ret)
pr_warn("proceeding without randomized stack protector\n");
+ else
+ __stack_chk_guard = chk_guard;
+
return 0;
}
late_initcall(stackprot_randomize_guard);