Date: Thu, 8 Jan 2009 13:18:46 GMT From: Yonggang Li <leeygang@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: bin/130300: netstat crash when params is incorrect Message-ID: <200901081318.n08DIkuj021838@www.freebsd.org> Resent-Message-ID: <200901081320.n08DK2wj097431@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 130300 >Category: bin >Synopsis: netstat crash when params is incorrect >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Jan 08 13:20:02 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Yonggang Li >Release: 7.0 Release >Organization: >Environment: FreeBSD freebsd.dlink-li 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386 >Description: netstat crash when input: netstat -m XXX XXX means any string. >How-To-Repeat: refer to Full Description. >Fix: it is caused by the code in /usr/src/usr.bin/netstat/main.c: main function #define BACKWARD_COMPATIBILITY #ifdef BACKWARD_COMPATIBILITY if (*argv) { if (isdigit(**argv)) { interval = atoi(*argv); if (interval <= 0) usage(); ++argv; iflag = 1; } if (*argv) { nlistf = *argv; if (*++argv) memf = *argv; } } #endif this backward_compatibility code can not recognize the incorrect params, but the internal flags(nlistf,memf) are set incorrectly instead. And if this code is obsolete, I suggest delete this code and add params check. Patch attached with submission follows: *** main.c Tue Jan 6 15:01:25 2009 --- ../main.c Thu Jan 8 13:16:43 2009 *************** *** 465,489 **** } argv += optind; argc -= optind; ! ! #define BACKWARD_COMPATIBILITY ! #ifdef BACKWARD_COMPATIBILITY ! if (*argv) { ! if (isdigit(**argv)) { ! interval = atoi(*argv); ! if (interval <= 0) ! usage(); ! ++argv; ! iflag = 1; ! } ! if (*argv) { ! nlistf = *argv; ! if (*++argv) ! memf = *argv; ! } ! } ! #endif ! /* * Discard setgid privileges if not the running kernel so that bad * guys can't print interesting stuff from kernel memory. --- 465,475 ---- } argv += optind; argc -= optind; ! /* ! * Params should be parsed without error. ! * */ ! if(argv) ! usage(); /* * Discard setgid privileges if not the running kernel so that bad * guys can't print interesting stuff from kernel memory. >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901081318.n08DIkuj021838>