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>