cvs commit: patches/gcc gcc-3.2.3-move-propolice-into-glibc.patch

tushar at linuxfromscratch.org tushar at linuxfromscratch.org
Wed Dec 3 10:30:37 PST 2003


tushar      03/12/03 11:30:37

  Added:       gcc      gcc-3.2.3-move-propolice-into-glibc.patch
  Log:
  Added gcc-3.2.3-move-propolice-into-glibc.patch
  
  Revision  Changes    Path
  1.1                  patches/gcc/gcc-3.2.3-move-propolice-into-glibc.patch
  
  Index: gcc-3.2.3-move-propolice-into-glibc.patch
  ===================================================================
  Submitted By: Robert Connolly <cendres at videotron dot ca> (ashes)
  Date: 2003-12-01
  Initial Package Version: 3.2.3
  Origin: http://emu.gentoo.org/~pappy/gentoo-x86/sys-devel/gcc/gcc-3.2.3-move-propolice-into-glibc.patch
  Description: ProPolice Stack Gaurd - Move functions to Glibc
  This patch works on gcc-3.2.3 and gcc-3.3.x
  http://www.linuxfromscratch.org/hints/downloads/files/propolice.txt
  http://www.topside.org/~ashes/files/protector/propolice.txt
  
  diff -u -r -N gcc-3.2.3.ORIG/gcc/libgcc-std.ver gcc-3.2.3/gcc/libgcc-std.ver
  --- gcc-3.2.3.ORIG/gcc/libgcc-std.ver	2003-11-11 18:12:52.000000000 +0100
  +++ gcc-3.2.3/gcc/libgcc-std.ver	2003-11-11 18:19:31.000000000 +0100
  @@ -176,6 +176,7 @@
     _Unwind_SjLj_Resume
   
     # stack smash handler symbols
  -  __guard
  -  __stack_smash_handler
  +  # these can be found in glibc now
  +  # __guard
  +  # __stack_smash_handler
   }
  diff -u -r -N gcc-3.2.3.ORIG/gcc/libgcc2.c gcc-3.2.3/gcc/libgcc2.c
  --- gcc-3.2.3.ORIG/gcc/libgcc2.c	2003-11-11 18:12:52.000000000 +0100
  +++ gcc-3.2.3/gcc/libgcc2.c	2003-11-11 18:20:44.000000000 +0100
  @@ -2052,100 +2052,7 @@
   #endif /* L_exit */
   
   #ifdef L_stack_smash_handler
  -#include <stdio.h>
  -#include <string.h>
  -#include <fcntl.h>
  -#include <unistd.h>
  -
  -#ifdef _POSIX_SOURCE
  -#include <signal.h>
  -#endif
  -
  -#if defined(HAVE_SYSLOG)
  -#include <sys/types.h>
  -#include <sys/socket.h>
  -#include <sys/un.h>
  -
  -#include <sys/syslog.h>
  -#ifndef _PATH_LOG
  -#define _PATH_LOG "/dev/log"
  -#endif
  -#endif
  -
  -long __guard[8] = {0,0,0,0,0,0,0,0};
  -static void __guard_setup (void) __attribute__ ((constructor)) ;
  -static void __guard_setup (void)
  -{
  -  int fd;
  -  if (__guard[0]!=0) return;
  -  fd = open ("/dev/urandom", 0);
  -  if (fd != -1) {
  -    ssize_t size = read (fd, (char*)&__guard, sizeof(__guard));
  -    close (fd) ;
  -    if (size == sizeof(__guard)) return;
  -  }
  -  /* If a random generator can't be used, the protector switches the guard
  -     to the "terminator canary" */
  -  ((char*)__guard)[0] = 0; ((char*)__guard)[1] = 0;
  -  ((char*)__guard)[2] = '\n'; ((char*)__guard)[3] = 255;
  -}
  -void __stack_smash_handler (char func[], int damaged ATTRIBUTE_UNUSED)
  -{
  -#if defined (__GNU_LIBRARY__)
  -  extern char * __progname;
  -#endif
  -  const char message[] = ": stack smashing attack in function ";
  -  int bufsz = 256, len;
  -  char buf[bufsz];
  -#if defined(HAVE_SYSLOG)
  -  int LogFile;
  -  struct sockaddr_un SyslogAddr;  /* AF_UNIX address of local logger */
  -#endif
  -#ifdef _POSIX_SOURCE
  -  {
  -    sigset_t mask;
  -    sigfillset(&mask);
  -    sigdelset(&mask, SIGABRT);	/* Block all signal handlers */
  -    sigprocmask(SIG_BLOCK, &mask, NULL); /* except SIGABRT */
  -  }
  -#endif
  -
  -  strcpy(buf, "<2>"); len=3;	/* send LOG_CRIT */
  -#if defined (__GNU_LIBRARY__)
  -  strncat(buf, __progname, bufsz-len-1); len = strlen(buf);
  -#endif
  -  if (bufsz>len) {strncat(buf, message, bufsz-len-1); len = strlen(buf);}
  -  if (bufsz>len) {strncat(buf, func, bufsz-len-1); len = strlen(buf);}
  -
  -  /* print error message */
  -  write (STDERR_FILENO, buf+3, len-3);
  -#if defined(HAVE_SYSLOG)
  -  if ((LogFile = socket(AF_UNIX, SOCK_DGRAM, 0)) != -1) {
  -
  -    /*
  -     * Send "found" message to the "/dev/log" path
  -     */
  -    SyslogAddr.sun_family = AF_UNIX;
  -    (void)strncpy(SyslogAddr.sun_path, _PATH_LOG,
  -		  sizeof(SyslogAddr.sun_path) - 1);
  -    SyslogAddr.sun_path[sizeof(SyslogAddr.sun_path) - 1] = '\0';
  -    sendto(LogFile, buf, len, 0, (struct sockaddr *)&SyslogAddr,
  -	   sizeof(SyslogAddr));
  -  }
  -#endif
  -
  -#ifdef _POSIX_SOURCE
  -  { /* Make sure the default handler is associated with SIGABRT */
  -    struct sigaction sa;
  -    
  -    memset(&sa, 0, sizeof(struct sigaction));
  -    sigfillset(&sa.sa_mask);	/* Block all signals */
  -    sa.sa_flags = 0;
  -    sa.sa_handler = SIG_DFL;
  -    sigaction(SIGABRT, &sa, NULL);
  -    (void)kill(getpid(), SIGABRT);
  -  }
  -#endif
  -  _exit(127);
  -}
  +extern long __guard[8];
  +extern void __guard_setup (void);
  +extern void __stack_smash_handler (char func[], int damaged);
   #endif
  
  
  



More information about the patches mailing list