Date: Sat, 8 Feb 1997 18:01:48 -0800 (PST) From: John-Mark Gurney <jmg@hydrogen.nike.efn.org> To: FreeBSD-gnats@freefall.FreeBSD.org Subject: bin/2702: brandelf has buffer over run and doesn't have a manpage Message-ID: <199702090201.SAA13537@hydrogen.nike.efn.org> Resent-Message-ID: <199702100800.AAA17020@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 2702
>Category: bin
>Synopsis: brandelf has buffer over run and doesn't have a manpage
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 10 00:00:03 PST 1997
>Last-Modified:
>Originator: John-Mark Gurney
>Organization:
Cu Networking
>Release: FreeBSD 2.2-960801-SNAP i386
>Environment:
and Freebsd system that has brandelf
>Description:
first brandelf copies the string provided on the commandline into a 10 char buffer... it doesn't check to make sure that string from the command line is only 9 chars... of course only the first 8 are actually used do to where the string is stored...
next it doesn't have an error reporting mechanism... I added it so that if will return a 1 if there were any errors... or a 0 otherwise...
it also didn't compile cleanly with -Wall
and of course lastly it doesn't have a man page...
hope this isn't too much for a pr :)
>How-To-Repeat:
umm.... stand on your head??
>Fix:
here is the patch that fixes all the above...
Common subdirectories: brandelf.orig/CVS and brandelf/CVS
diff -Nc brandelf.orig/Makefile brandelf/Makefile
*** brandelf.orig/Makefile Wed Oct 16 11:16:22 1996
--- brandelf/Makefile Thu Feb 6 18:23:39 1997
***************
*** 1,5 ****
PROG= brandelf
- NOMAN= brandelf.1
-
.include <bsd.prog.mk>
--- 1,3 ----
diff -Nc brandelf.orig/brandelf.1 brandelf/brandelf.1
*** brandelf.orig/brandelf.1 Wed Dec 31 16:00:00 1969
--- brandelf/brandelf.1 Sat Feb 8 18:00:10 1997
***************
*** 0 ****
--- 1,87 ----
+ .\" Copyright (c) 1997
+ .\" John-Mark Gurney. All rights reserved.
+ .\"
+ .\" Redistribution and use in source and binary forms, with or without
+ .\" modification, are permitted provided that the following conditions
+ .\" are met:
+ .\" 1. Redistributions of source code must retain the above copyright
+ .\" notice, this list of conditions and the following disclaimer.
+ .\" 2. Redistributions in binary form must reproduce the above copyright
+ .\" notice, this list of conditions and the following disclaimer in the
+ .\" documentation and/or other materials provided with the distribution.
+ .\" 3. Neither the name of the author nor the names of any co-contributors
+ .\" may be used to endorse or promote products derived from this software
+ .\" without specific prior written permission.
+ .\"
+ .\" THIS SOFTWARE IS PROVIDED BY John-Mark Gurney AND CONTRIBUTORS ``AS IS''
+ .\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ .\" SUCH DAMAGE.
+ .\"
+ .\"
+ .Dd February 6, 1997
+ .Dt BRANDELF 1
+ .Os FreeBSD
+ .Sh NAME
+ .Nm brandelf
+ .Nd mark an ELF binary for a specific ABI
+ .Sh SYNOPSIS
+ .Nm brandelf
+ .Op Fl v
+ .Op Fl t Ar string
+ .Ar file ...
+ .Sh DESCRIPTION
+ This command marks an ELF binary to be run under a certain ABI for FreeBSD.
+ .Pp
+ The options are as follows:
+ .Bl -tag -width Fl
+ .It Fl v
+ turns on verbose reporting
+ .It Fl t Ar string
+ Brands listed ELF binaries with
+ .Ar string
+ as the ABI type. Current supported ABI's are
+ .Dq FreeBSD
+ and
+ .Dq Linux .
+ Only the first eight characters of the
+ .Ar string
+ are used in the branding.
+ .It Ar file
+ If
+ .Fl t Ar string
+ is given it will brand
+ .Ar file
+ with
+ .Ar string ,
+ otherwise it will simply display the branding of
+ .Ar file .
+ .El
+ .Sh EXAMPLES
+ The following is an example of a typical usage
+ of the
+ .Nm
+ command:
+ .Pp
+ .Dl % brandelf file
+ .Dl % brandelf -t Linux file
+ .Sh SEE ALSO
+ .Sh DIAGNOSTICS
+ Exist status is 0 on success, and 1 if the command
+ fails if a file doesn't exist, is too short, or fails to brand properly.
+ .Sh HISTORY
+ The
+ .Nm
+ manual page example first appeared in
+ .Fx 3.0 .
+ .Sh AUTHOR
+ This
+ manual page was written by John-Mark Gurney
+ .Aq gurney_j@efn.org .
diff -Nc brandelf.orig/brandelf.c brandelf/brandelf.c
*** brandelf.orig/brandelf.c Mon Jan 13 22:58:33 1997
--- brandelf/brandelf.c Thu Feb 6 19:06:18 1997
***************
*** 30,46 ****
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/imgact_elf.h>
int usage();
main(int argc, char **argv)
{
extern char *optarg;
extern int optind;
! char type[10] = "FreeBSD";
int ch, change = 0, verbose = 0;
while ((ch = getopt(argc, argv, "t:v")) != EOF)
--- 30,50 ----
#include <stdlib.h>
#include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
#include <fcntl.h>
#include <sys/imgact_elf.h>
int usage();
+ int
main(int argc, char **argv)
{
extern char *optarg;
extern int optind;
! char *type = "FreeBSD";
! int failed = 0;
int ch, change = 0, verbose = 0;
while ((ch = getopt(argc, argv, "t:v")) != EOF)
***************
*** 50,56 ****
break;
case 't':
change = 1;
! strcpy(type, optarg);
break;
default:
usage();
--- 54,60 ----
break;
case 't':
change = 1;
! type = strdup(optarg);
break;
default:
usage();
***************
*** 68,84 ****
--- 72,91 ----
if ((fd = open(argv[0], O_RDWR, 0)) < 0) {
fprintf(stderr, "No such file %s.\n", argv[0]);
+ failed = 1;
goto fail;
}
if (read(fd, buffer, EI_NINDENT) < EI_NINDENT) {
fprintf(stderr, "File '%s' too short.\n", argv[0]);
+ failed = 1;
goto fail;
}
if (buffer[0] != ELFMAG0 || buffer[1] != ELFMAG1 ||
buffer[2] != ELFMAG2 || buffer[3] != ELFMAG3) {
fprintf(stderr, "File '%s' is not ELF format.\n",
argv[0]);
+ failed = 1;
goto fail;
}
if (!change) {
***************
*** 97,102 ****
--- 104,110 ----
lseek(fd, 0, SEEK_SET);
if (write(fd, buffer, EI_NINDENT) != EI_NINDENT) {
fprintf(stderr, "Error writing %s\n", argv[0]);
+ failed = 1;
goto fail;
}
}
***************
*** 104,113 ****
--- 112,127 ----
argc--;
argv++;
}
+
+ if(failed)
+ exit(1);
+ else
+ exit(0);
}
int
usage()
{
fprintf(stderr, "Usage: brandelf [-t string] file ...\n");
+ exit(1);
}
>Audit-Trail:
>Unformatted:
John-Mark Gurney
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702090201.SAA13537>
