Tuesday, June 30, 2020

Re: net/flow-tools man pages, seg fault on improper command line input

> Thanks, I've just fixed /etc/flow-tools/flow-tools and
> /usr/usr/local/bin/python2.7 in -current.

Thank you very much for your quick assistance!

I did find a few new problems:

Category: net/flow-tools
Environment:
Details : OpenBSD 6.7-current (GENERIC.MP) #306: Fri Jun 26 22:13:55 MDT 2020
deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
Architecture: OpenBSD.amd64
Description:

1. These man pages show formatting codes instead of man pages andrunning make shows errors with docbook-to-man:
flow-capture
flow-export
flow-header
flow-import
flow-nfilter
flow-report
flow-stat
flow-tools-examples
flow-xlate

2. Improper command line input can generate a segmentation fault.

How-To-Repeat:
1. man flow-capture, flow-export, ...
To generate the make error: cd /usr/ports/net/flow-tools && make

snipped output:

Making all in docs
gmake[1]: Entering directory '/usr/ports/pobj/flow-tools-0.68.6/flow-tools-0.68.6/docs'
docbook-to-man flow-capture.sgml > flow-capture.1
nsgmls:/usr/local/share/sgml//docbook/dsssl/modular/catalog:28:0:W: DTDDECL catalog entries are not supported
Abort trap (core dumped)
docbook-to-man flow-cat.sgml > flow-cat.1
nsgmls:/usr/local/share/sgml//docbook/dsssl/modular/catalog:28:0:W: DTDDECL catalog entries are not supported

2. flow-cat ft-v05.xxx | flow-print -f -6
generates segmentation fault. The above extra hyphen for the 6 is a deliberate error.
flow-print -f 6 gives IP Accounting format.

Fix:
1. not sure. man pages are okay in previous versions

2. Instead of using atoi, perhaps use strtonum and errx in the getopt cases. There are
many calls to atoi, but I just tried to fix one in flow-print. I was unable to test
it though. I tried just removing doc from the Makefile MAKE_FLAGS SUBDIRS and apply
the patch below, but when I ran make install, it always seemed to install the code
without my patch. I'm sure that part is my fault, I just don't know how to correct it.
I tried:
cd /usr/ports/net/flow-tools
make patch
cd /usr/ports/pobj/flow-tools-0.68.6/flow-tools-0.68.6/src/flow-print.c
cp flow-print.c flow-print.c.orig
# edit file, then
cd /usr/ports/net/flow-tools
make update-patches
cd patches
cvs add patch-src-_flow-print_c
cd /usr/ports/net/flow-tools
cvs diff -uNp
make
make install

There may be other examples of input that would generate a segmentation fault.

My patch for what it's worth:

$OpenBSD$

Index: src/flow-print.c
--- src/flow-print.c.orig
+++ src/flow-print.c
@@ -28,6 +28,7 @@

#include "ftconfig.h"
#include <ftlib.h>
+#include <err.h>

#include <sys/time.h>
#include <sys/types.h>
@@ -98,6 +99,7 @@ char **argv;
int i, format_index, set_format, ret;
int print_header, options, debug;
char cc; /* comment character */
+ const char *errstr;

/* init fterr */
fterr_setid(argv[0]);
@@ -124,7 +126,9 @@ char **argv;
break;

case 'f': /* format */
- format_index = atoi(optarg);
+ format_index = strtonum(optarg, 0, NFORMATS, &errstr);
+ if (errstr != NULL)
+ errx(1,"invalid report format number. %s : %s", errstr, optarg);
set_format = 1;
break;

No comments:

Post a Comment