Module Name: src Committed By: christos Date: Sun Nov 19 18:49:52 UTC 2017
Modified Files: src/sys/net: rtsock.c Log Message: Avoid using a zero family mask. To generate a diff of this commit: cvs rdiff -u -r1.230 -r1.231 src/sys/net/rtsock.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/net/rtsock.c diff -u src/sys/net/rtsock.c:1.230 src/sys/net/rtsock.c:1.231 --- src/sys/net/rtsock.c:1.230 Fri Nov 17 02:37:12 2017 +++ src/sys/net/rtsock.c Sun Nov 19 13:49:51 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.230 2017/11/17 07:37:12 ozaki-r Exp $ */ +/* $NetBSD: rtsock.c,v 1.231 2017/11/19 18:49:51 christos Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.230 2017/11/17 07:37:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.231 2017/11/19 18:49:51 christos Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -821,8 +821,13 @@ COMPATNAME(route_output)(struct mbuf *m, * (padded with 0's). We keep the original length of the sockaddr. */ if (info.rti_info[RTAX_NETMASK]) { + /* + * Use the family of RTAX_DST, because RTAX_NETMASK + * can have a zero family if it comes from the radix + * tree via rt_mask(). + */ socklen_t sa_len = sockaddr_getsize_by_family( - info.rti_info[RTAX_NETMASK]->sa_family); + info.rti_info[RTAX_DST]->sa_family); socklen_t masklen = sockaddr_getlen( info.rti_info[RTAX_NETMASK]); if (sa_len != 0 && sa_len > masklen) {