dietlibc/dietlibc-0.31-stacksmash.patch
2007-09-01 12:34:41 +00:00

40 lines
1.6 KiB
Diff

2007-09-01 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
* lib/stack_smash_handler2: modified __stack_chk_fail() to trigger
a segfault by accessing address 0x0. Every system with an MMU
known by me, segfaults by dereferencing a NULL pointer
* Makefile: added hack to compile stack_smash_handler2 with
'--fno-omit-frame-pointer'.
diff -up dietlibc-0.31/lib/stack_smash_handler2.c.~1~ dietlibc-0.31/lib/stack_smash_handler2.c
--- dietlibc-0.31/lib/stack_smash_handler2.c.stacksmash
+++ dietlibc-0.31/lib/stack_smash_handler2.c
@@ -8,5 +8,13 @@ void __stack_chk_fail(void);
* diagnostics. No more. :-( */
void __stack_chk_fail(void) {
__write2("smashed stack detected, program terminated.\n");
- _exit(127);
+
+ /* trigger a segfault which can be inspected within a debugger (inclusive
+ * stack-trace). 'abort(3)' at this place would be too heavy weighted.
+ *
+ * TODO: limit this to systems which are known to have an MMU (resp. is
+ * dietlibc with stack-protector used on systems without an MMU?)
+ */
+ while (1)
+ *(char *)0 = 0;
}
--- dietlibc-0.31/Makefile.stacksmash
+++ dietlibc-0.31/Makefile
@@ -172,9 +172,10 @@ $(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h
$(OBJDIR)/pthread_%.o: libpthread/pthread_%.c
$(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
+$(OBJDIR)/stack_smash_handler2.o: XCFLAGS:=-fno-omit-frame-pointer
$(OBJDIR)/%.o: %.c
- $(CROSS)$(CC) $(INC) $(CFLAGS) -c $< -o $@ -D__dietlibc__
+ $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ -D__dietlibc__
$(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@
endif