Merge tag 'armsoc-devicetree' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[sfrench/cifs-2.6.git] / drivers / misc / lkdtm_bugs.c
index 041fe6e9532a5d1df5697831c11cfa20bf500a11..9e0b4f9599870581428f89ac115e7c7c778bf892 100644 (file)
@@ -85,16 +85,31 @@ void lkdtm_OVERFLOW(void)
 
 static noinline void __lkdtm_CORRUPT_STACK(void *stack)
 {
-       memset(stack, 'a', 64);
+       memset(stack, '\xff', 64);
 }
 
+/* This should trip the stack canary, not corrupt the return address. */
 noinline void lkdtm_CORRUPT_STACK(void)
 {
        /* Use default char array length that triggers stack protection. */
-       char data[8];
+       char data[8] __aligned(sizeof(void *));
+
+       __lkdtm_CORRUPT_STACK(&data);
+
+       pr_info("Corrupted stack containing char array ...\n");
+}
+
+/* Same as above but will only get a canary with -fstack-protector-strong */
+noinline void lkdtm_CORRUPT_STACK_STRONG(void)
+{
+       union {
+               unsigned short shorts[4];
+               unsigned long *ptr;
+       } data __aligned(sizeof(void *));
+
        __lkdtm_CORRUPT_STACK(&data);
 
-       pr_info("Corrupted stack with '%16s'...\n", data);
+       pr_info("Corrupted stack containing union ...\n");
 }
 
 void lkdtm_UNALIGNED_LOAD_STORE_WRITE(void)