diff options
-rw-r--r-- | sys/net/rtsock.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index bbdd0279a04c..6775f09cfe50 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1124,9 +1124,12 @@ route_output(struct mbuf *m, struct socket *so, ...) rc = rc_simple; } #endif + /* nh MAY be empty if RTM_CHANGE request is no-op */ nh = rc.rc_nh_new; - rtm->rtm_index = nh->nh_ifp->if_index; - rtm->rtm_flags = rc.rc_rt->rte_flags | nhop_get_rtflags(nh); + if (nh != NULL) { + rtm->rtm_index = nh->nh_ifp->if_index; + rtm->rtm_flags = rc.rc_rt->rte_flags | nhop_get_rtflags(nh); + } } break; @@ -1163,7 +1166,7 @@ route_output(struct mbuf *m, struct socket *so, ...) senderr(EOPNOTSUPP); } - if (error == 0) { + if (error == 0 && nh != NULL) { error = update_rtm_from_rc(&info, &rtm, alloc_len, &rc, nh); /* * Note that some sockaddr pointers may have changed to |