Module Name: src
Committed By: ozaki-r
Date: Mon Apr 25 14:38:08 UTC 2016
Modified Files:
src/sys/net: route.c rtsock.c
src/sys/netinet: if_arp.c
src/sys/netinet6: nd6.c
Log Message:
Check error of rt_setgate and rt_settag
To generate a diff of this commit:
cvs rdiff -u -r1.163 -r1.164 src/sys/net/route.c
cvs rdiff -u -r1.183 -r1.184 src/sys/net/rtsock.c
cvs rdiff -u -r1.208 -r1.209 src/sys/netinet/if_arp.c
cvs rdiff -u -r1.191 -r1.192 src/sys/netinet6/nd6.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/route.c
diff -u src/sys/net/route.c:1.163 src/sys/net/route.c:1.164
--- src/sys/net/route.c:1.163 Mon Apr 25 14:30:42 2016
+++ src/sys/net/route.c Mon Apr 25 14:38:08 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: route.c,v 1.163 2016/04/25 14:30:42 ozaki-r Exp $ */
+/* $NetBSD: route.c,v 1.164 2016/04/25 14:38:08 ozaki-r Exp $ */
/*-
* Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -96,7 +96,7 @@
#endif
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.163 2016/04/25 14:30:42 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.164 2016/04/25 14:38:08 ozaki-r Exp $");
#include <sys/param.h>
#ifdef RTFLUSH_DEBUG
@@ -549,10 +549,12 @@ rtredirect(const struct sockaddr *dst, c
* Smash the current notion of the gateway to
* this destination. Should check about netmask!!!
*/
- rt->rt_flags |= RTF_MODIFIED;
- flags |= RTF_MODIFIED;
+ error = rt_setgate(rt, gateway);
+ if (error == 0) {
+ rt->rt_flags |= RTF_MODIFIED;
+ flags |= RTF_MODIFIED;
+ }
stat = &rtstat.rts_newgateway;
- rt_setgate(rt, gateway);
}
} else
error = EHOSTUNREACH;
@@ -825,8 +827,12 @@ rtrequest1(int req, struct rt_addrinfo *
}
rt_set_ifa(rt, ifa);
- if (info->rti_info[RTAX_TAG] != NULL)
- rt_settag(rt, info->rti_info[RTAX_TAG]);
+ if (info->rti_info[RTAX_TAG] != NULL) {
+ const struct sockaddr *tag;
+ tag = rt_settag(rt, info->rti_info[RTAX_TAG]);
+ if (tag == NULL)
+ senderr(ENOBUFS);
+ }
RT_DPRINTF("rt->_rt_key = %p\n", (void *)rt->_rt_key);
if (info->rti_info[RTAX_IFP] != NULL &&
(ifa2 = ifa_ifwithnet(info->rti_info[RTAX_IFP])) != NULL &&
Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.183 src/sys/net/rtsock.c:1.184
--- src/sys/net/rtsock.c:1.183 Mon Apr 25 10:55:01 2016
+++ src/sys/net/rtsock.c Mon Apr 25 14:38:08 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: rtsock.c,v 1.183 2016/04/25 10:55:01 ozaki-r Exp $ */
+/* $NetBSD: rtsock.c,v 1.184 2016/04/25 14:38:08 ozaki-r 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.183 2016/04/25 10:55:01 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.184 2016/04/25 14:38:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -745,8 +745,12 @@ COMPATNAME(route_output)(struct mbuf *m,
if (error != 0)
senderr(error);
}
- if (info.rti_info[RTAX_TAG])
- rt_settag(rt, info.rti_info[RTAX_TAG]);
+ if (info.rti_info[RTAX_TAG]) {
+ const struct sockaddr *tag;
+ tag = rt_settag(rt, info.rti_info[RTAX_TAG]);
+ if (tag == NULL)
+ senderr(ENOBUFS);
+ }
/* new gateway could require new ifaddr, ifp;
flags may also be different; ifp may be specified
by ll sockaddr when protocol address is ambiguous */
Index: src/sys/netinet/if_arp.c
diff -u src/sys/netinet/if_arp.c:1.208 src/sys/netinet/if_arp.c:1.209
--- src/sys/netinet/if_arp.c:1.208 Tue Apr 19 04:13:56 2016
+++ src/sys/netinet/if_arp.c Mon Apr 25 14:38:08 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: if_arp.c,v 1.208 2016/04/19 04:13:56 ozaki-r Exp $ */
+/* $NetBSD: if_arp.c,v 1.209 2016/04/25 14:38:08 ozaki-r Exp $ */
/*-
* Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.208 2016/04/19 04:13:56 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.209 2016/04/25 14:38:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@@ -506,6 +506,10 @@ arp_rtrequest(int req, struct rtentry *r
break;
case RTM_ADD:
gate = arp_setgate(rt, gate, info->rti_info[RTAX_NETMASK]);
+ if (gate == NULL) {
+ log(LOG_ERR, "%s: arp_setgate failed\n", __func__);
+ break;
+ }
if ((rt->rt_flags & RTF_CONNECTED) ||
(rt->rt_flags & RTF_LOCAL)) {
/*
Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.191 src/sys/netinet6/nd6.c:1.192
--- src/sys/netinet6/nd6.c:1.191 Thu Apr 21 05:07:50 2016
+++ src/sys/netinet6/nd6.c Mon Apr 25 14:38:08 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: nd6.c,v 1.191 2016/04/21 05:07:50 ozaki-r Exp $ */
+/* $NetBSD: nd6.c,v 1.192 2016/04/25 14:38:08 ozaki-r Exp $ */
/* $KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $ */
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.191 2016/04/21 05:07:50 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.192 2016/04/25 14:38:08 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_net_mpsafe.h"
@@ -1389,6 +1389,12 @@ nd6_rtrequest(int req, struct rtentry *r
rt_setgate(rt, &u.sa);
gate = rt->rt_gateway;
RT_DPRINTF("rt_getkey(rt) = %p\n", rt_getkey(rt));
+ if (gate == NULL) {
+ log(LOG_ERR,
+ "%s: rt_setgate failed on %s\n", __func__,
+ if_name(ifp));
+ break;
+ }
RT_DPRINTF("rt_getkey(rt) = %p\n", rt_getkey(rt));
if ((rt->rt_flags & RTF_CONNECTED) != 0)