diff options
author | 2004-02-28 09:14:10 +0000 | |
---|---|---|
committer | 2004-02-28 09:14:10 +0000 | |
commit | 3d68424875c7020e95087d19bcf31dd7d59d04da (patch) | |
tree | b0b540787d92b543916b191a2d674dcc30d68d80 | |
parent | kill bad functions; some sort of ok from marc who is trying to confuse me (diff) | |
download | wireguard-openbsd-3d68424875c7020e95087d19bcf31dd7d59d04da.tar.xz wireguard-openbsd-3d68424875c7020e95087d19bcf31dd7d59d04da.zip |
- Don't permit 0-padded unit numbers on cloned interfaces. Bug repoprt
from otto@
- Fix signedness issue with unit numbers. Bug report from Thorsten Glaser
ok millert@ otto@
-rw-r--r-- | sys/net/if.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index c6178ab3223..0a0620fa711 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if.c,v 1.83 2004/02/08 19:46:10 markus Exp $ */ +/* $OpenBSD: if.c,v 1.84 2004/02/28 09:14:10 mcbride Exp $ */ /* $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $ */ /* @@ -694,6 +694,9 @@ if_clone_lookup(name, unitp) if (cp == name || cp - name == IFNAMSIZ || !*cp) return (NULL); /* No name or unit number */ + if (cp - name < IFNAMSIZ-1 && *cp == '0' && cp[1] != '\0') + return (NULL); /* unit number 0 padded */ + LIST_FOREACH(ifc, &if_cloners, ifc_list) { if (strlen(ifc->ifc_name) == cp - name && !strncmp(name, ifc->ifc_name, cp - name)) @@ -705,7 +708,8 @@ if_clone_lookup(name, unitp) unit = 0; while (cp - name < IFNAMSIZ && *cp) { - if (*cp < '0' || *cp > '9' || unit > INT_MAX / 10) { + if (*cp < '0' || *cp > '9' || + unit > (INT_MAX - (*cp - '0')) / 10) { /* Bogus unit number. */ return (NULL); } |