bin/80348: rs(1) handles command line arguments improperly (SIGSEGV)

Wojciech A. Koszek dunstan at freebsd.czest.pl
Mon Apr 25 16:40:18 PDT 2005


>Number:         80348
>Category:       bin
>Synopsis:       rs(1) handles command line arguments improperly (SIGSEGV)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Apr 25 23:40:17 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Wojciech A. Koszek
>Release:        FreeBSD 5.4-STABLE i386
>Organization:
>Environment:
System: FreeBSD dunstan.freebsd.czest.pl 5.4-STABLE FreeBSD 5.4-STABLE #8: Sat Apr 16 16:26:40 CEST 2005 dunstan at dunstan.freebsd.czest.pl:/usr/obj/usr/src/sys/HOME8 i386

>Description:
rs(1) takes number of rows and columns from command line. Due the lack of
validity checking, it has problems with handling malicious values.

>How-To-Repeat:

$ echo test | rs 1 -99999999999
zsh: done                              echo test | 
zsh: segmentation fault (core dumped)  rs 1 -99999999999

Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...
Core was generated by `rs'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5...done.
Loaded symbols for /lib/libc.so.5
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x0804936b in prepfile () at /usr/src/usr.bin/rs/rs.c:324
324                             colwidths[ocols - 1] = 0;
(gdb) bt
#0  0x0804936b in prepfile () at /usr/src/usr.bin/rs/rs.c:324
#1  0x0804891c in main (argc=3, argv=0xbfbfe420) at
/usr/src/usr.bin/rs/rs.c:122
(gdb) f 0
#0  0x0804936b in prepfile () at /usr/src/usr.bin/rs/rs.c:324
324                             colwidths[ocols - 1] = 0;
(gdb) f 1
#1  0x0804891c in main (argc=3, argv=0xbfbfe420) at
/usr/src/usr.bin/rs/rs.c:122
122             prepfile();
(gdb) l   
117             getfile();
118             if (flags & SHAPEONLY) {
119                     printf("%d %d\n", irows, icols);
120                     exit(0);
121             }
122             prepfile();
123             putfile();
124             exit(0);
125     }
126     
(gdb) f 0
#0  0x0804936b in prepfile () at /usr/src/usr.bin/rs/rs.c:324
324                             colwidths[ocols - 1] = 0;
(gdb) list
319                             colwidths[i] = colw;
320             if (!(flags & NOTRIMENDCOL)) {
321                     if (flags & RIGHTADJUST)
322                             colwidths[0] -= gutter;
323                     else
324                             colwidths[ocols - 1] = 0;
325             }
326             n = orows * ocols;
327             if (n > nelem && (flags & RECYCLE))
328                     nelem = n;
(gdb) quit

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list