summaryrefslogtreecommitdiffstats
path: root/sys/net/if_tun.c
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2006-06-29 19:22:05 +0000
committeryar <yar@FreeBSD.org>2006-06-29 19:22:05 +0000
commitba19b1ecd4d6f2950416c0596e5007ae8ffb5360 (patch)
tree3d6a9cdea9fbb33471c0beed7b40c5ae89e5a37c /sys/net/if_tun.c
parentfb752eb168e0c0461ca9c98b0c8452c4d96ec4a7 (diff)
downloadFreeBSD-src-ba19b1ecd4d6f2950416c0596e5007ae8ffb5360.zip
FreeBSD-src-ba19b1ecd4d6f2950416c0596e5007ae8ffb5360.tar.gz
There is a consensus that ifaddr.ifa_addr should never be NULL,
except in places dealing with ifaddr creation or destruction; and in such special places incomplete ifaddrs should never be linked to system-wide data structures. Therefore we can eliminate all the superfluous checks for "ifa->ifa_addr != NULL" and get ready to the system crashing honestly instead of masking possible bugs. Suggested by: glebius, jhb, ru
Diffstat (limited to 'sys/net/if_tun.c')
-rw-r--r--sys/net/if_tun.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index deee367..b0d0e42 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -393,28 +393,23 @@ tuninit(struct ifnet *ifp)
ifp->if_drv_flags |= IFF_DRV_RUNNING;
getmicrotime(&ifp->if_lastchange);
- TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
- if (ifa->ifa_addr == NULL)
- error = EFAULT;
- /* XXX: Should maybe return straight off? */
- else {
#ifdef INET
- if (ifa->ifa_addr->sa_family == AF_INET) {
- struct sockaddr_in *si;
-
- si = (struct sockaddr_in *)ifa->ifa_addr;
- mtx_lock(&tp->tun_mtx);
- if (si->sin_addr.s_addr)
- tp->tun_flags |= TUN_IASET;
-
- si = (struct sockaddr_in *)ifa->ifa_dstaddr;
- if (si && si->sin_addr.s_addr)
- tp->tun_flags |= TUN_DSTADDR;
- mtx_unlock(&tp->tun_mtx);
- }
-#endif
+ TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+ if (ifa->ifa_addr->sa_family == AF_INET) {
+ struct sockaddr_in *si;
+
+ si = (struct sockaddr_in *)ifa->ifa_addr;
+ mtx_lock(&tp->tun_mtx);
+ if (si->sin_addr.s_addr)
+ tp->tun_flags |= TUN_IASET;
+
+ si = (struct sockaddr_in *)ifa->ifa_dstaddr;
+ if (si && si->sin_addr.s_addr)
+ tp->tun_flags |= TUN_DSTADDR;
+ mtx_unlock(&tp->tun_mtx);
}
}
+#endif
return (error);
}
OpenPOWER on IntegriCloud