Module Name: src Committed By: rmind Date: Sat May 17 21:26:20 UTC 2014
Modified Files: src/sys/compat/linux/common: linux_socket.c src/sys/compat/linux32/common: linux32_socket.c src/sys/netinet: ip_output.c src/sys/netinet6: in6_src.c ip6_mroute.c ip6_output.c nd6_rtr.c scope6.c Log Message: Replace open-coded access (and boundary checking) of ifindex2ifnet with if_byindex() function. To generate a diff of this commit: cvs rdiff -u -r1.117 -r1.118 src/sys/compat/linux/common/linux_socket.c cvs rdiff -u -r1.17 -r1.18 src/sys/compat/linux32/common/linux32_socket.c cvs rdiff -u -r1.224 -r1.225 src/sys/netinet/ip_output.c cvs rdiff -u -r1.53 -r1.54 src/sys/netinet6/in6_src.c cvs rdiff -u -r1.106 -r1.107 src/sys/netinet6/ip6_mroute.c cvs rdiff -u -r1.155 -r1.156 src/sys/netinet6/ip6_output.c cvs rdiff -u -r1.90 -r1.91 src/sys/netinet6/nd6_rtr.c cvs rdiff -u -r1.8 -r1.9 src/sys/netinet6/scope6.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/linux/common/linux_socket.c diff -u src/sys/compat/linux/common/linux_socket.c:1.117 src/sys/compat/linux/common/linux_socket.c:1.118 --- src/sys/compat/linux/common/linux_socket.c:1.117 Mon Jan 27 19:19:15 2014 +++ src/sys/compat/linux/common/linux_socket.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: linux_socket.c,v 1.117 2014/01/27 19:19:15 njoly Exp $ */ +/* $NetBSD: linux_socket.c,v 1.118 2014/05/17 21:26:20 rmind Exp $ */ /*- * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.117 2014/01/27 19:19:15 njoly Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.118 2014/05/17 21:26:20 rmind Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -1105,10 +1105,7 @@ linux_getifname(struct lwp *l, register_ if (error) return error; - if (ifr.ifr_ifru.ifru_ifindex >= if_indexlim) - return ENODEV; - - ifp = ifindex2ifnet[ifr.ifr_ifru.ifru_ifindex]; + ifp = if_byindex(ifr.ifr_ifru.ifru_ifindex); if (ifp == NULL) return ENODEV; Index: src/sys/compat/linux32/common/linux32_socket.c diff -u src/sys/compat/linux32/common/linux32_socket.c:1.17 src/sys/compat/linux32/common/linux32_socket.c:1.18 --- src/sys/compat/linux32/common/linux32_socket.c:1.17 Fri Jan 11 19:01:36 2013 +++ src/sys/compat/linux32/common/linux32_socket.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: linux32_socket.c,v 1.17 2013/01/11 19:01:36 christos Exp $ */ +/* $NetBSD: linux32_socket.c,v 1.18 2014/05/17 21:26:20 rmind Exp $ */ /*- * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved. @@ -33,7 +33,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.17 2013/01/11 19:01:36 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: linux32_socket.c,v 1.18 2014/05/17 21:26:20 rmind Exp $"); #include <sys/types.h> #include <sys/param.h> @@ -398,10 +398,7 @@ linux32_getifname(struct lwp *l, registe if (error) return error; - if (ifr.ifr_ifru.ifru_ifindex >= if_indexlim) - return ENODEV; - - ifp = ifindex2ifnet[ifr.ifr_ifru.ifru_ifindex]; + ifp = if_byindex(ifr.ifr_ifru.ifru_ifindex); if (ifp == NULL) return ENODEV; Index: src/sys/netinet/ip_output.c diff -u src/sys/netinet/ip_output.c:1.224 src/sys/netinet/ip_output.c:1.225 --- src/sys/netinet/ip_output.c:1.224 Sat Jun 29 21:06:58 2013 +++ src/sys/netinet/ip_output.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_output.c,v 1.224 2013/06/29 21:06:58 rmind Exp $ */ +/* $NetBSD: ip_output.c,v 1.225 2014/05/17 21:26:20 rmind Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.224 2013/06/29 21:06:58 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.225 2014/05/17 21:26:20 rmind Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -1315,9 +1315,7 @@ ip_multicast_if(struct in_addr *a, int * *ifindexp = 0; if (ntohl(a->s_addr) >> 24 == 0) { ifindex = ntohl(a->s_addr) & 0xffffff; - if (ifindex < 0 || if_indexlim <= ifindex) - return NULL; - ifp = ifindex2ifnet[ifindex]; + ifp = if_byindex(ifindex); if (!ifp) return NULL; if (ifindexp) Index: src/sys/netinet6/in6_src.c diff -u src/sys/netinet6/in6_src.c:1.53 src/sys/netinet6/in6_src.c:1.54 --- src/sys/netinet6/in6_src.c:1.53 Mon Jun 25 15:28:39 2012 +++ src/sys/netinet6/in6_src.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_src.c,v 1.53 2012/06/25 15:28:39 christos Exp $ */ +/* $NetBSD: in6_src.c,v 1.54 2014/05/17 21:26:20 rmind Exp $ */ /* $KAME: in6_src.c,v 1.159 2005/10/19 01:40:32 t-momose Exp $ */ /* @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.53 2012/06/25 15:28:39 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_src.c,v 1.54 2014/05/17 21:26:20 rmind Exp $"); #include "opt_inet.h" @@ -591,7 +591,7 @@ selectroute(struct sockaddr_in6 *dstsock /* If the caller specify the outgoing interface explicitly, use it. */ if (opts && (pi = opts->ip6po_pktinfo) != NULL && pi->ipi6_ifindex) { /* XXX boundary check is assumed to be already done. */ - ifp = ifindex2ifnet[pi->ipi6_ifindex]; + ifp = if_byindex(pi->ipi6_ifindex); if (ifp != NULL && (norouteok || retrt == NULL || IN6_IS_ADDR_MULTICAST(dst))) { Index: src/sys/netinet6/ip6_mroute.c diff -u src/sys/netinet6/ip6_mroute.c:1.106 src/sys/netinet6/ip6_mroute.c:1.107 --- src/sys/netinet6/ip6_mroute.c:1.106 Tue Feb 25 18:30:12 2014 +++ src/sys/netinet6/ip6_mroute.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_mroute.c,v 1.106 2014/02/25 18:30:12 pooka Exp $ */ +/* $NetBSD: ip6_mroute.c,v 1.107 2014/05/17 21:26:20 rmind Exp $ */ /* $KAME: ip6_mroute.c,v 1.49 2001/07/25 09:21:18 jinmei Exp $ */ /* @@ -117,7 +117,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_mroute.c,v 1.106 2014/02/25 18:30:12 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_mroute.c,v 1.107 2014/05/17 21:26:20 rmind Exp $"); #include "opt_inet.h" #include "opt_mrouting.h" @@ -658,13 +658,7 @@ add_m6if(struct mif6ctl *mifcp) mifp = mif6table + mifcp->mif6c_mifi; if (mifp->m6_ifp) return EADDRINUSE; /* XXX: is it appropriate? */ - if (mifcp->mif6c_pifi == 0 || mifcp->mif6c_pifi >= if_indexlim) - return ENXIO; - /* - * XXX: some OSes can remove ifp and clear ifindex2ifnet[id] - * even for id between 0 and if_index. - */ - if ((ifp = ifindex2ifnet[mifcp->mif6c_pifi]) == NULL) + if (!mifcp->mif6c_pifi || (ifp = if_byindex(mifcp->mif6c_pifi)) == NULL) return ENXIO; if (mifcp->mif6c_flags & MIFF_REGISTER) { Index: src/sys/netinet6/ip6_output.c diff -u src/sys/netinet6/ip6_output.c:1.155 src/sys/netinet6/ip6_output.c:1.156 --- src/sys/netinet6/ip6_output.c:1.155 Thu Oct 3 20:27:55 2013 +++ src/sys/netinet6/ip6_output.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6_output.c,v 1.155 2013/10/03 20:27:55 christos Exp $ */ +/* $NetBSD: ip6_output.c,v 1.156 2014/05/17 21:26:20 rmind Exp $ */ /* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.155 2013/10/03 20:27:55 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.156 2014/05/17 21:26:20 rmind Exp $"); #include "opt_inet.h" #include "opt_inet6.h" @@ -2277,11 +2277,10 @@ ip6_setmoptions(const struct sockopt *so break; if (ifindex != 0) { - if (if_indexlim <= ifindex || !ifindex2ifnet[ifindex]) { + if ((ifp = if_byindex(ifindex)) == NULL) { error = ENXIO; /* XXX EINVAL? */ break; } - ifp = ifindex2ifnet[ifindex]; if ((ifp->if_flags & IFF_MULTICAST) == 0) { error = EADDRNOTAVAIL; break; @@ -2379,12 +2378,10 @@ ip6_setmoptions(const struct sockopt *so /* * If the interface is specified, validate it. */ - if (if_indexlim <= mreq.ipv6mr_interface || - !ifindex2ifnet[mreq.ipv6mr_interface]) { + if ((ifp = if_byindex(mreq.ipv6mr_interface)) == NULL) { error = ENXIO; /* XXX EINVAL? */ break; } - ifp = ifindex2ifnet[mreq.ipv6mr_interface]; } /* @@ -2438,12 +2435,10 @@ ip6_setmoptions(const struct sockopt *so * to its ifnet structure. */ if (mreq.ipv6mr_interface != 0) { - if (if_indexlim <= mreq.ipv6mr_interface || - !ifindex2ifnet[mreq.ipv6mr_interface]) { + if ((ifp = if_byindex(mreq.ipv6mr_interface)) == NULL) { error = ENXIO; /* XXX EINVAL? */ break; } - ifp = ifindex2ifnet[mreq.ipv6mr_interface]; } else ifp = NULL; @@ -2737,12 +2732,9 @@ ip6_setpktopt(int optname, u_char *buf, return (EINVAL); } - /* validate the interface index if specified. */ - if (pktinfo->ipi6_ifindex >= if_indexlim) { - return (ENXIO); - } + /* Validate the interface index if specified. */ if (pktinfo->ipi6_ifindex) { - ifp = ifindex2ifnet[pktinfo->ipi6_ifindex]; + ifp = if_byindex(pktinfo->ipi6_ifindex); if (ifp == NULL) return (ENXIO); } Index: src/sys/netinet6/nd6_rtr.c diff -u src/sys/netinet6/nd6_rtr.c:1.90 src/sys/netinet6/nd6_rtr.c:1.91 --- src/sys/netinet6/nd6_rtr.c:1.90 Sat Sep 14 21:08:35 2013 +++ src/sys/netinet6/nd6_rtr.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: nd6_rtr.c,v 1.90 2013/09/14 21:08:35 martin Exp $ */ +/* $NetBSD: nd6_rtr.c,v 1.91 2014/05/17 21:26:20 rmind Exp $ */ /* $KAME: nd6_rtr.c,v 1.95 2001/02/07 08:09:47 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.90 2013/09/14 21:08:35 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd6_rtr.c,v 1.91 2014/05/17 21:26:20 rmind Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -2162,19 +2162,15 @@ rt6_deleteroute(struct rtentry *rt, void int nd6_setdefaultiface(int ifindex) { + ifnet_t *ifp; int error = 0; - if (ifindex < 0 || if_indexlim <= ifindex) - return (EINVAL); - if (ifindex != 0 && !ifindex2ifnet[ifindex]) - return (EINVAL); - + if ((ifp = if_byindex(ifindex)) == NULL) { + return EINVAL; + } if (nd6_defifindex != ifindex) { nd6_defifindex = ifindex; - if (nd6_defifindex > 0) { - nd6_defifp = ifindex2ifnet[nd6_defifindex]; - } else - nd6_defifp = NULL; + nd6_defifp = nd6_defifindex > 0 ? ifp : NULL; /* * Our current implementation assumes one-to-one maping between Index: src/sys/netinet6/scope6.c diff -u src/sys/netinet6/scope6.c:1.8 src/sys/netinet6/scope6.c:1.9 --- src/sys/netinet6/scope6.c:1.8 Fri Sep 11 22:06:29 2009 +++ src/sys/netinet6/scope6.c Sat May 17 21:26:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: scope6.c,v 1.8 2009/09/11 22:06:29 dyoung Exp $ */ +/* $NetBSD: scope6.c,v 1.9 2014/05/17 21:26:20 rmind Exp $ */ /* $KAME$ */ /*- @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: scope6.c,v 1.8 2009/09/11 22:06:29 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: scope6.c,v 1.9 2014/05/17 21:26:20 rmind Exp $"); #include <sys/param.h> #include <sys/malloc.h> @@ -130,7 +130,7 @@ scope6_set(struct ifnet *ifp, const stru return (EINVAL); if (i == IPV6_ADDR_SCOPE_LINKLOCAL && - idlist->s6id_list[i] >= if_indexlim) { + !if_byindex(idlist->s6id_list[i])) { /* * XXX: theoretically, there should be no * relationship between link IDs and interface @@ -309,14 +309,8 @@ sa6_embedscope(struct sockaddr_in6 *sin6 * zone IDs assuming a one-to-one mapping between interfaces * and links. */ - if (if_indexlim <= zoneid) - return (ENXIO); -#ifdef __FreeBSD__ - ifp = ifnet_byindex(zoneid); -#else - ifp = ifindex2ifnet[zoneid]; -#endif - if (ifp == NULL) /* XXX: this can happen for some OS */ + ifp = if_byindex(zoneid); + if (ifp == NULL) return (ENXIO); /* XXX assignment to 16bit from 32bit variable */ @@ -363,14 +357,7 @@ sa6_recoverscope(struct sockaddr_in6 *si */ zoneid = ntohs(sin6->sin6_addr.s6_addr16[1]); if (zoneid) { - /* sanity check */ - if (/* zoneid < 0 || */ if_indexlim <= zoneid) - return (ENXIO); -#ifdef __FreeBSD__ - if (!ifnet_byindex(zoneid)) -#else - if (!ifindex2ifnet[zoneid]) -#endif + if (!if_byindex(zoneid)) return (ENXIO); sin6->sin6_addr.s6_addr16[1] = 0; sin6->sin6_scope_id = zoneid;