Forráskód Böngészése

fix(stack_protector): move stack_chk_guard to libc

greatbridf 1 éve
szülő
commit
431d80298f
4 módosított fájl, 16 hozzáadás és 4 törlés
  1. 1 0
      gblibc/CMakeLists.txt
  2. 10 2
      gblibc/src/errno.c
  3. 5 0
      gblibc/src/platform-independent.s
  4. 0 2
      src/kernel.ld

+ 1 - 0
gblibc/CMakeLists.txt

@@ -19,6 +19,7 @@ add_library(gblibc STATIC
     src/stat.c
     src/time.c
     src/signal.c
+    src/platform-independent.s
 )
 
 add_library(crt0 OBJECT

+ 10 - 2
gblibc/src/errno.c

@@ -10,11 +10,19 @@ int* __errno_location(void)
 
 void
 __attribute__((noreturn))
-__attribute__((visibility("hidden")))
-__stack_chk_fail_local(void)
+__attribute__((weak))
+__stack_chk_fail(void)
 {
     const char* msg = "***** stack overflow detected *****\n"
                       "quiting...\n";
     write(STDERR_FILENO, msg, strlen(msg));
     exit(-1);
 }
+
+void
+__attribute__((noreturn))
+__attribute__((weak))
+__stack_chk_fail_local(void)
+{
+    __stack_chk_fail();
+}

+ 5 - 0
gblibc/src/platform-independent.s

@@ -0,0 +1,5 @@
+.section .rodata
+
+.globl __stack_chk_guard
+__stack_chk_guard:
+    .long 0x19198101

+ 0 - 2
src/kernel.ld

@@ -84,8 +84,6 @@ SECTIONS
         LONG(__bss_end - __bss_start);
         kernel_size = .;
         LONG(__data_end - __kinit_start);
-        __stack_chk_guard = .;
-        LONG(0x19198101);
 
         . = ALIGN(0x1000);
         __rodata_end = .;