WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel][PATCH] minios: _chk_fail and _chk canaries for minios and ne

To: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel][PATCH] minios: _chk_fail and _chk canaries for minios and newlib
From: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
Date: Wed, 25 Mar 2009 14:31:45 +0100
Cc: "George S. Coker, II" <gscoker@xxxxxxxxxxxxxx>
Delivery-date: Wed, 25 Mar 2009 06:32:16 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <C5DAC535.2AA16%gscoker@xxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Mail-followup-to: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, "George S. Coker, II" <gscoker@xxxxxxxxxxxxxx>
References: <C5DAC535.2AA16%gscoker@xxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.12-2006-07-14
Hello,

Just resending George's patch for inclusion.

Samuel



minios: _chk_fail and _chk canaries for minios and newlib

Add __stack_chk_fail to mini-os and __sprintf_chk __fprintf_chk to
newlib, to cope with ocaml runtimes compiled with -fstack-protector.

From: "George S. Coker, II" <gscoker@xxxxxxxxxxxxxx>
Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>

diff -r f8187a343ad2 extras/mini-os/lib/stack_chk_fail.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/mini-os/lib/stack_chk_fail.c       Sat Feb 28 04:56:36 2009 -0500
@@ -0,0 +1,8 @@
+#include <kernel.h>
+#include <console.h>
+
+void __stack_chk_fail(void)
+{
+    printk("stack smashing detected\n");
+    do_exit();
+}
diff -r f8187a343ad2 stubdom/Makefile
--- a/stubdom/Makefile  Fri Feb 20 17:02:36 2009 +0000
+++ b/stubdom/Makefile  Sat Feb 28 04:56:36 2009 -0500
@@ -93,6 +93,7 @@
 newlib-$(NEWLIB_VERSION): newlib-$(NEWLIB_VERSION).tar.gz
        tar xzf $<
        patch -d $@ -p0 < newlib.patch
+       patch -d $@ -p0 < newlib-chk.patch
        touch $@
 
 NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a
diff -r f8187a343ad2 stubdom/newlib-chk.patch
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/stubdom/newlib-chk.patch  Sat Feb 28 04:56:36 2009 -0500
@@ -0,0 +1,159 @@
+diff -Naur newlib-1.16.0/newlib/libc/stdio/fprintf_chk.c 
newlib-1.16.0/newlib/libc/stdio/fprintf_chk.c
+--- newlib-1.16.0/newlib/libc/stdio/fprintf_chk.c      1969-12-31 
19:00:00.000000000 -0500
++++ newlib-1.16.0/newlib/libc/stdio/fprintf_chk.c      2009-02-26 
19:02:53.000000000 -0500
+@@ -0,0 +1,21 @@
++#include <stdarg.h>
++#include <stdio.h>
++
++/*
++ * Stub implementation of __fprintf_chk adapted from glibc 2.7.  This 
++ * doesn't actually implement any buffer overflow protection.  It just makes
++ * the linker happy :)
++*/
++int
++__fprintf_chk (FILE *fp, int flag, const char *format, ...)
++{
++  va_list ap;
++  int done;
++
++  va_start (ap, format);
++  done = vfprintf (fp, format, ap);
++  va_end (ap);
++
++  return done;
++}
++
+diff -Naur newlib-1.16.0/newlib/libc/stdio/Makefile.am 
newlib-1.16.0/newlib/libc/stdio/Makefile.am
+--- ./newlib-1.16.0/newlib/libc/stdio/Makefile.am      2007-08-02 
16:23:06.000000000 -0400
++++ ./newlib-1.16.0/newlib/libc/stdio/Makefile.am      2009-02-26 
18:14:53.000000000 -0500
+@@ -20,6 +20,7 @@
+       flags.c                 \
+       fopen.c                 \
+       fprintf.c                       \
++      fprintf_chk.c           \
+       fputc.c                 \
+       fputs.c                 \
+       fread.c                 \
+@@ -65,6 +66,7 @@
+       sniprintf.c                     \
+       snprintf.c                      \
+       sprintf.c                       \
++      sprintf_chk.c                   \
+       sscanf.c                        \
+       stdio.c                 \
+       tmpfile.c                       \
+diff -Naur newlib-1.16.0/newlib/libc/stdio/Makefile.in 
newlib-1.16.0/newlib/libc/stdio/Makefile.in
+--- newlib-1.16.0/newlib/libc/stdio/Makefile.in        2007-12-19 
17:36:38.000000000 -0500
++++ newlib-1.16.0/newlib/libc/stdio/Makefile.in        2009-02-26 
18:43:52.000000000 -0500
+@@ -63,7 +63,8 @@
+       lib_a-fgets.$(OBJEXT) lib_a-fileno.$(OBJEXT) \
+       lib_a-findfp.$(OBJEXT) lib_a-fiprintf.$(OBJEXT) \
+       lib_a-flags.$(OBJEXT) lib_a-fopen.$(OBJEXT) \
+-      lib_a-fprintf.$(OBJEXT) lib_a-fputc.$(OBJEXT) \
++      lib_a-fprintf.$(OBJEXT) lib_a-fprintf_chk.$(OBJEXT) \
++      lib_a-fputc.$(OBJEXT) \
+       lib_a-fputs.$(OBJEXT) lib_a-fread.$(OBJEXT) \
+       lib_a-freopen.$(OBJEXT) lib_a-fscanf.$(OBJEXT) \
+       lib_a-fiscanf.$(OBJEXT) lib_a-fseek.$(OBJEXT) \
+@@ -86,6 +87,7 @@
+       lib_a-setvbuf.$(OBJEXT) lib_a-siprintf.$(OBJEXT) \
+       lib_a-siscanf.$(OBJEXT) lib_a-sniprintf.$(OBJEXT) \
+       lib_a-snprintf.$(OBJEXT) lib_a-sprintf.$(OBJEXT) \
++      lib_a-sprintf_chk.$(OBJEXT) \
+       lib_a-sscanf.$(OBJEXT) lib_a-stdio.$(OBJEXT) \
+       lib_a-tmpfile.$(OBJEXT) lib_a-tmpnam.$(OBJEXT) \
+       lib_a-ungetc.$(OBJEXT) lib_a-vdiprintf.$(OBJEXT) \
+@@ -122,15 +124,15 @@
+ LTLIBRARIES = $(noinst_LTLIBRARIES)
+ am__objects_4 = clearerr.lo fclose.lo fdopen.lo feof.lo ferror.lo \
+       fflush.lo fgetc.lo fgetpos.lo fgets.lo fileno.lo findfp.lo \
+-      fiprintf.lo flags.lo fopen.lo fprintf.lo fputc.lo fputs.lo \
+-      fread.lo freopen.lo fscanf.lo fiscanf.lo fseek.lo fsetpos.lo \
++      fiprintf.lo flags.lo fopen.lo fprintf.lo fprintf_chk.lo fputc.lo \
++      fputs.lo fread.lo freopen.lo fscanf.lo fiscanf.lo fseek.lo fsetpos.lo \
+       ftell.lo fvwrite.lo fwalk.lo fwrite.lo getc.lo getchar.lo \
+       getc_u.lo getchar_u.lo getdelim.lo getline.lo gets.lo \
+       iprintf.lo iscanf.lo makebuf.lo perror.lo printf.lo putc.lo \
+       putchar.lo putc_u.lo putchar_u.lo puts.lo refill.lo remove.lo \
+       rename.lo rewind.lo rget.lo scanf.lo sccl.lo setbuf.lo \
+       setbuffer.lo setlinebuf.lo setvbuf.lo siprintf.lo siscanf.lo \
+-      sniprintf.lo snprintf.lo sprintf.lo sscanf.lo stdio.lo \
++      sniprintf.lo snprintf.lo sprintf.lo sprintf_chk.lo sscanf.lo stdio.lo \
+       tmpfile.lo tmpnam.lo ungetc.lo vdiprintf.lo vdprintf.lo \
+       viprintf.lo viscanf.lo vprintf.lo vscanf.lo vsiprintf.lo \
+       vsiscanf.lo vsnprintf.lo vsniprintf.lo vsprintf.lo vsscanf.lo \
+@@ -344,6 +346,7 @@
+       flags.c                 \
+       fopen.c                 \
+       fprintf.c                       \
++      fprintf_chk.c                   \
+       fputc.c                 \
+       fputs.c                 \
+       fread.c                 \
+@@ -389,6 +392,7 @@
+       sniprintf.c                     \
+       snprintf.c                      \
+       sprintf.c                       \
++      sprintf_chk.c                   \
+       sscanf.c                        \
+       stdio.c                 \
+       tmpfile.c                       \
+@@ -508,6 +512,7 @@
+       siprintf.def            \
+       siscanf.def             \
+       sprintf.def             \
++      sprintf_chk.def         \
+       sscanf.def              \
+       tmpfile.def             \
+       tmpnam.def              \
+@@ -678,6 +683,12 @@
+ lib_a-fprintf.obj: fprintf.c
+       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf.obj `if test -f 
'fprintf.c'; then $(CYGPATH_W) 'fprintf.c'; else $(CYGPATH_W) 
'$(srcdir)/fprintf.c'; fi`
+ 
++lib_a-fprintf_chk.o: fprintf_chk.c
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf_chk.o `test -f 
'fprintf_chk.c' || echo '$(srcdir)/'`fprintf_chk.c
++
++lib_a-fprintf_chk.obj: fprintf_chk.c
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf_chk.obj `if test -f 
'fprintf_chk.c'; then $(CYGPATH_W) 'fprintf_chk.c'; else $(CYGPATH_W) 
'$(srcdir)/fprintf_chk.c'; fi`
++
+ lib_a-fputc.o: fputc.c
+       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fputc.o `test -f 'fputc.c' || 
echo '$(srcdir)/'`fputc.c
+ 
+@@ -948,6 +959,12 @@
+ lib_a-sprintf.obj: sprintf.c
+       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf.obj `if test -f 
'sprintf.c'; then $(CYGPATH_W) 'sprintf.c'; else $(CYGPATH_W) 
'$(srcdir)/sprintf.c'; fi`
+ 
++lib_a-sprintf_chk.o: sprintf_chk.c
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf_chk.o `test -f 
'sprintf_chk.c' || echo '$(srcdir)/'`sprintf_chk.c
++
++lib_a-sprintf_chk.obj: sprintf_chk.c
++      $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf_chk.obj `if test -f 
'sprintf_chk.c'; then $(CYGPATH_W) 'sprintf_chk.c'; else $(CYGPATH_W) 
'$(srcdir)/sprintf_chk.c'; fi`
++
+ lib_a-sscanf.o: sscanf.c
+       $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) 
$(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sscanf.o `test -f 'sscanf.c' 
|| echo '$(srcdir)/'`sscanf.c
+ 
+diff -Naur ./newlib-1.16.0/newlib/libc/stdio/sprintf_chk.c 
../newlib-1.16.0/newlib/libc/stdio/sprintf_chk.c
+--- newlib-1.16.0/newlib/libc/stdio/sprintf_chk.c      1969-12-31 
19:00:00.000000000 -0500
++++ newlib-1.16.0/newlib/libc/stdio/sprintf_chk.c      2009-02-26 
19:02:26.000000000 -0500
+@@ -0,0 +1,21 @@
++#include <stdarg.h>
++#include <stdio.h>
++
++/*
++ * Stub implementation of __sprintf_chk adapted from glibc 2.7.  This 
++ * doesn't actually implement any buffer overflow protection.  It just makes
++ * the linker happy :)
++*/
++int
++__sprintf_chk (char *s, int flags, size_t slen, const char *format, ...)
++{
++  va_list arg;
++  int done;
++
++  va_start (arg, format);
++  done = vsprintf (s, format, arg);
++  va_end (arg);
++
++  return done;
++}
++

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel