aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@FreeBSD.org>1999-06-01 13:14:07 +0000
committerRuslan Ermilov <ru@FreeBSD.org>1999-06-01 13:14:07 +0000
commit1e3b39d361ff5ca8f8d39952596082ba0c603d34 (patch)
treef948ade22243cb43c17420b09281bf3eb73c2c58 /sbin
parentf0828bf1b0728d47ed1ed5da9a46305324e64747 (diff)
downloadsrc-1e3b39d361ff5ca8f8d39952596082ba0c603d34.tar.gz
src-1e3b39d361ff5ca8f8d39952596082ba0c603d34.zip
Get rid of segfaults in a set-uid program.
PR: 11823 Reviewed by: des
Notes
Notes: svn path=/head/; revision=47668
Diffstat (limited to 'sbin')
-rw-r--r--sbin/route/route.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/sbin/route/route.c b/sbin/route/route.c
index 02c6b77e3268..45261b0e1571 100644
--- a/sbin/route/route.c
+++ b/sbin/route/route.c
@@ -42,7 +42,7 @@ static const char copyright[] =
static char sccsid[] = "@(#)route.c 8.3 (Berkeley) 3/19/94";
#endif
static const char rcsid[] =
- "$Id$";
+ "$Id: route.c,v 1.29 1998/07/28 06:25:35 charnier Exp $";
#endif /* not lint */
#include <sys/param.h>
@@ -581,28 +581,34 @@ newroute(argc, argv)
flags |= RTF_STATIC;
break;
case K_IFA:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
(void) getaddr(RTA_IFA, *++argv, 0);
break;
case K_IFP:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
(void) getaddr(RTA_IFP, *++argv, 0);
break;
case K_GENMASK:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
(void) getaddr(RTA_GENMASK, *++argv, 0);
break;
case K_GATEWAY:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
(void) getaddr(RTA_GATEWAY, *++argv, 0);
break;
case K_DST:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
ishost = getaddr(RTA_DST, *++argv, &hp);
dest = *argv;
break;
case K_NETMASK:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
(void) getaddr(RTA_NETMASK, *++argv, 0);
/* FALLTHROUGH */
case K_NET:
@@ -616,7 +622,8 @@ newroute(argc, argv)
case K_SSTHRESH:
case K_RTT:
case K_RTTVAR:
- argc--;
+ if (!--argc)
+ usage((char *)NULL);
set_metric(*++argv, key);
break;
default: