aboutsummaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2014-04-27 10:43:48 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2014-04-27 10:43:48 +0000
commitf1fcb55271ca244ca43ebedacfba83cb201f28c6 (patch)
tree187a226d8825a378ffc2c1862eae5c2315f276c7 /sys/net
parent92c227af54baf380eff446012b76d6b810e49ec3 (diff)
downloadsrc-f1fcb55271ca244ca43ebedacfba83cb201f28c6.tar.gz
src-f1fcb55271ca244ca43ebedacfba83cb201f28c6.zip
Remove useless zeroing of RTAX_DST on error.
Cleanup a bit. MFC after: 1 month
Notes
Notes: svn path=/head/; revision=265011
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/rtsock.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 674f81d3a5e1..ecb31a6dbfa7 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -542,32 +542,38 @@ route_output(struct mbuf *m, struct socket *so)
panic("route_output");
len = m->m_pkthdr.len;
if (len < sizeof(*rtm) ||
- len != mtod(m, struct rt_msghdr *)->rtm_msglen) {
- info.rti_info[RTAX_DST] = NULL;
+ len != mtod(m, struct rt_msghdr *)->rtm_msglen)
senderr(EINVAL);
- }
+
R_Malloc(rtm, struct rt_msghdr *, len);
- if (rtm == NULL) {
- info.rti_info[RTAX_DST] = NULL;
+ if (rtm == NULL)
senderr(ENOBUFS);
- }
m_copydata(m, 0, len, (caddr_t)rtm);
+ bzero(&info, sizeof(info));
+
if (rtm->rtm_version != RTM_VERSION) {
- info.rti_info[RTAX_DST] = NULL;
+ /* Do not touch message since format is unknown */
+ Free(rtm);
+ rtm = NULL;
senderr(EPROTONOSUPPORT);
}
+
+ /*
+ * Starting from here, it is possible
+ * to alter original message and insert
+ * caller PID and error value.
+ */
+
rtm->rtm_pid = curproc->p_pid;
- bzero(&info, sizeof(info));
info.rti_addrs = rtm->rtm_addrs;
/*
* rt_xaddrs() performs s6_addr[2] := sin6_scope_id for AF_INET6
* link-local address because rtrequest requires addresses with
* embedded scope id.
*/
- if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, &info)) {
- info.rti_info[RTAX_DST] = NULL;
+ if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, &info))
senderr(EINVAL);
- }
+
info.rti_flags = rtm->rtm_flags;
if (info.rti_info[RTAX_DST] == NULL ||
info.rti_info[RTAX_DST]->sa_family >= AF_MAX ||