On Sat, 15 Oct 2011 19:33:22 +0200, Pascal Stumpf wrote:
> Oh, and I just checked: This bug even is in src binutils (both 2.15 and
> 2.17), just nobody noticed because -Werror isn't used there (but it
> probably should be fixed there too, right?).
> 
> 

Upstream fix is here.  Attached are patches for devel/gdb, devel/libbfd
and base binutils 2.15 and 2.17 (permission to use under GPLv2 has been
granted, thanks to nickc at redhat dot com).



Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/libbfd/Makefile,v
retrieving revision 1.6
diff -u -p -r1.6 Makefile
--- Makefile    27 Sep 2011 21:38:42 -0000      1.6
+++ Makefile    25 Oct 2011 14:08:53 -0000
@@ -5,7 +5,7 @@ COMMENT=        GNU Binary File Descriptor libr
 VER=           2.20
 DISTNAME=      binutils-${VER}
 PKGNAME=       libbfd-${VER}
-REVISION=      1
+REVISION=      2
 EXTRACT_SUFX=  .tar.bz2
 
 HOMEPAGE=      http://www.gnu.org/software/binutils/
@@ -26,8 +26,7 @@ MASTER_SITES= ${MASTER_SITE_GNU:=binutil
 USE_LIBTOOL=   Yes
 LIBTOOL_FLAGS= --tag=disable-shared
 CONFIGURE_ARGS+= --disable-nls \
-               --disable-shared \
-               --disable-werror
+               --disable-shared
 
 WRKSRC=${WRKDIR}/${DISTNAME}/bfd
 
Index: patches/patch-bfd_peXXigen_c
===================================================================
RCS file: patches/patch-bfd_peXXigen_c
diff -N patches/patch-bfd_peXXigen_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-bfd_peXXigen_c        25 Oct 2011 14:08:53 -0000
@@ -0,0 +1,22 @@
+$OpenBSD$
+fix out-of-bounds memcpys
+--- bfd/peXXigen.c.orig        Tue Oct 25 16:03:53 2011
++++ bfd/peXXigen.c     Tue Oct 25 16:04:25 2011
+@@ -248,7 +248,7 @@ _bfd_XXi_swap_aux_in (bfd *        abfd,
+         in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
+       }
+       else
+-      memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
++      memcpy (in->x_file.x_fname, ext->x_file.x_fname, sizeof 
in->x_file.x_fname);
+       return;
+ 
+     case C_STAT:
+@@ -322,7 +322,7 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
+         H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
+       }
+       else
+-      memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
++      memcpy (ext->x_file.x_fname, in->x_file.x_fname, sizeof 
ext->x_file.x_fname);
+ 
+       return AUXESZ;
+ 
Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/gdb/Makefile,v
retrieving revision 1.10
diff -u -p -r1.10 Makefile
--- Makefile    27 Sep 2011 20:26:45 -0000      1.10
+++ Makefile    25 Oct 2011 14:09:02 -0000
@@ -4,7 +4,7 @@ COMMENT=        GNU debugger
 CATEGORIES=    devel
 
 DISTNAME=      gdb-7.2
-REVISION=      1
+REVISION=      2
 
 MASTER_SITES=  ${MASTER_SITE_GNU:=gdb/} \
                http://distfiles.nl/
Index: patches/patch-bfd_peXXigen_c
===================================================================
RCS file: patches/patch-bfd_peXXigen_c
diff -N patches/patch-bfd_peXXigen_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-bfd_peXXigen_c        25 Oct 2011 14:09:02 -0000
@@ -0,0 +1,22 @@
+$OpenBSD$
+Fix out-of-bounds memcpys (FILNMLEN is 18, sizeof x_fname is 14).
+--- bfd/peXXigen.c.orig        Tue Oct 25 15:31:49 2011
++++ bfd/peXXigen.c     Tue Oct 25 15:32:39 2011
+@@ -249,7 +249,7 @@ _bfd_XXi_swap_aux_in (bfd *        abfd,
+         in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
+       }
+       else
+-      memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
++      memcpy (in->x_file.x_fname, ext->x_file.x_fname, sizeof 
in->x_file.x_fname);
+       return;
+ 
+     case C_STAT:
+@@ -323,7 +323,7 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
+         H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
+       }
+       else
+-      memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
++      memcpy (ext->x_file.x_fname, in->x_file.x_fname, sizeof 
ext->x_file.x_fname);
+ 
+       return AUXESZ;
+ 
Index: peXXigen.c
===================================================================
RCS file: /cvs/src/gnu/usr.bin/binutils/bfd/peXXigen.c,v
retrieving revision 1.4
diff -u -r1.4 peXXigen.c
--- peXXigen.c  2 Nov 2004 20:45:11 -0000       1.4
+++ peXXigen.c  25 Oct 2011 14:16:35 -0000
@@ -271,7 +271,7 @@
          in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
        }
       else
-       memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
+       memcpy (in->x_file.x_fname, ext->x_file.x_fname, sizeof 
in->x_file.x_fname);
       return;
 
     case C_STAT:
@@ -344,7 +344,7 @@
          H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
        }
       else
-       memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
+       memcpy (ext->x_file.x_fname, in->x_file.x_fname, sizeof 
ext->x_file.x_fname);
 
       return AUXESZ;
 
Index: peXXigen.c
===================================================================
RCS file: /cvs/src/gnu/usr.bin/binutils-2.17/bfd/peXXigen.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 peXXigen.c
--- peXXigen.c  24 Apr 2011 20:14:42 -0000      1.1.1.1
+++ peXXigen.c  25 Oct 2011 14:17:23 -0000
@@ -235,7 +235,7 @@
          in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
        }
       else
-       memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
+       memcpy (in->x_file.x_fname, ext->x_file.x_fname, sizeof 
in->x_file.x_fname);
       return;
 
     case C_STAT:
@@ -308,7 +308,7 @@
          H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
        }
       else
-       memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
+       memcpy (ext->x_file.x_fname, in->x_file.x_fname, sizeof 
ext->x_file.x_fname);
 
       return AUXESZ;
 

Reply via email to