summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorbluhm <bluhm@openbsd.org>2018-09-10 16:14:07 +0000
committerbluhm <bluhm@openbsd.org>2018-09-10 16:14:07 +0000
commitf02cb2e83cda2e7c843af31d86dd656fd741d8ab (patch)
treeeaf8366e40f233b53e70230953160d8a4fca02ba /sys
parentif_setrdomain could potentially call if_clone_create recursively in the create (diff)
downloadwireguard-openbsd-f02cb2e83cda2e7c843af31d86dd656fd741d8ab.tar.xz
wireguard-openbsd-f02cb2e83cda2e7c843af31d86dd656fd741d8ab.zip
Instead of calculating the mbuf packet header length here and there,
put the algorithm into a new function m_calchdrlen(). Also set an uninitialized m_len to 0 in NFS code. OK claudio@
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/uipc_mbuf.c14
-rw-r--r--sys/net/pf_norm.c23
-rw-r--r--sys/netinet/ip_input.c11
-rw-r--r--sys/netinet6/frag6.c11
-rw-r--r--sys/nfs/krpc_subr.c10
-rw-r--r--sys/nfs/nfs_socket.c13
-rw-r--r--sys/sys/mbuf.h3
7 files changed, 27 insertions, 58 deletions
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
index 2dda4b56292..4349c02e882 100644
--- a/sys/kern/uipc_mbuf.c
+++ b/sys/kern/uipc_mbuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uipc_mbuf.c,v 1.257 2018/09/10 12:47:02 bluhm Exp $ */
+/* $OpenBSD: uipc_mbuf.c,v 1.258 2018/09/10 16:14:07 bluhm Exp $ */
/* $NetBSD: uipc_mbuf.c,v 1.15.4.1 1996/06/13 17:11:44 cgd Exp $ */
/*
@@ -327,6 +327,18 @@ m_resethdr(struct mbuf *m)
m->m_pkthdr.ph_loopcnt = loopcnt;
}
+void
+m_calchdrlen(struct mbuf *m)
+{
+ struct mbuf *n;
+ int plen = 0;
+
+ KASSERT(m->m_flags & M_PKTHDR);
+ for (n = m; n; n = n->m_next)
+ plen += n->m_len;
+ m->m_pkthdr.len = plen;
+}
+
struct mbuf *
m_getclr(int nowait, int type)
{
diff --git a/sys/net/pf_norm.c b/sys/net/pf_norm.c
index d60dd43442b..20503b82b57 100644
--- a/sys/net/pf_norm.c
+++ b/sys/net/pf_norm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pf_norm.c,v 1.215 2018/09/10 12:47:02 bluhm Exp $ */
+/* $OpenBSD: pf_norm.c,v 1.216 2018/09/10 16:14:07 bluhm Exp $ */
/*
* Copyright 2001 Niels Provos <provos@citi.umich.edu>
@@ -805,16 +805,7 @@ pf_reassemble(struct mbuf **m0, int dir, u_short *reason)
hdrlen = frent->fe_hdrlen;
m = *m0 = pf_join_fragment(frag);
frag = NULL;
-
- {
- int plen = 0;
-
- KASSERT(m->m_flags & M_PKTHDR);
- for (m = *m0; m; m = m->m_next)
- plen += m->m_len;
- m = *m0;
- m->m_pkthdr.len = plen;
- }
+ m_calchdrlen(m);
ip = mtod(m, struct ip *);
ip->ip_len = htons(hdrlen + total);
@@ -907,15 +898,7 @@ pf_reassemble6(struct mbuf **m0, struct ip6_frag *fraghdr,
if (frag6_deletefraghdr(m, hdrlen) != 0)
goto fail;
- {
- int plen = 0;
-
- KASSERT(m->m_flags & M_PKTHDR);
- for (m = *m0; m; m = m->m_next)
- plen += m->m_len;
- m = *m0;
- m->m_pkthdr.len = plen;
- }
+ m_calchdrlen(m);
if ((mtag = m_tag_get(PACKET_TAG_PF_REASSEMBLED, sizeof(struct
pf_fragment_tag), M_NOWAIT)) == NULL)
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
index 3e9bab33b36..9d248132686 100644
--- a/sys/netinet/ip_input.c
+++ b/sys/netinet/ip_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_input.c,v 1.339 2018/09/10 12:47:02 bluhm Exp $ */
+/* $OpenBSD: ip_input.c,v 1.340 2018/09/10 16:14:07 bluhm Exp $ */
/* $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $ */
/*
@@ -964,14 +964,7 @@ insert:
pool_put(&ipq_pool, fp);
m->m_len += (ip->ip_hl << 2);
m->m_data -= (ip->ip_hl << 2);
- {
- int plen = 0;
-
- KASSERT(m->m_flags & M_PKTHDR);
- for (t = m; t; t = t->m_next)
- plen += t->m_len;
- m->m_pkthdr.len = plen;
- }
+ m_calchdrlen(m);
return (m);
dropfrag:
diff --git a/sys/netinet6/frag6.c b/sys/netinet6/frag6.c
index 5e8721f15e2..aae4f0c7c9a 100644
--- a/sys/netinet6/frag6.c
+++ b/sys/netinet6/frag6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: frag6.c,v 1.84 2018/09/10 12:47:02 bluhm Exp $ */
+/* $OpenBSD: frag6.c,v 1.85 2018/09/10 16:14:08 bluhm Exp $ */
/* $KAME: frag6.c,v 1.40 2002/05/27 21:40:31 itojun Exp $ */
/*
@@ -431,14 +431,7 @@ frag6_input(struct mbuf **mp, int *offp, int proto, int af)
pool_put(&ip6q_pool, q6);
- {
- int plen = 0;
-
- KASSERT(m->m_flags & M_PKTHDR);
- for (t = m; t; t = t->m_next)
- plen += t->m_len;
- m->m_pkthdr.len = plen;
- }
+ m_calchdrlen(m);
/*
* Restore NXT to the original.
diff --git a/sys/nfs/krpc_subr.c b/sys/nfs/krpc_subr.c
index 5c3c62ecba4..eee2f371201 100644
--- a/sys/nfs/krpc_subr.c
+++ b/sys/nfs/krpc_subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: krpc_subr.c,v 1.34 2018/07/30 12:22:14 mpi Exp $ */
+/* $OpenBSD: krpc_subr.c,v 1.35 2018/09/10 16:14:08 bluhm Exp $ */
/* $NetBSD: krpc_subr.c,v 1.12.4.1 1996/06/07 00:52:26 cgd Exp $ */
/*
@@ -339,13 +339,7 @@ krpc_call(struct sockaddr_in *sa, u_int prog, u_int vers, u_int func,
/*
* Setup packet header
*/
- len = 0;
- m = mhead;
- while (m) {
- len += m->m_len;
- m = m->m_next;
- }
- mhead->m_pkthdr.len = len;
+ m_calchdrlen(mhead);
mhead->m_pkthdr.ph_ifidx = 0;
/*
diff --git a/sys/nfs/nfs_socket.c b/sys/nfs/nfs_socket.c
index 33d6ba14d76..7b2c59b5668 100644
--- a/sys/nfs/nfs_socket.c
+++ b/sys/nfs/nfs_socket.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nfs_socket.c,v 1.130 2018/07/30 12:22:14 mpi Exp $ */
+/* $OpenBSD: nfs_socket.c,v 1.131 2018/09/10 16:14:08 bluhm Exp $ */
/* $NetBSD: nfs_socket.c,v 1.27 1996/04/15 20:20:00 thorpej Exp $ */
/*
@@ -855,7 +855,6 @@ nfs_request(struct vnode *vp, int procnum, struct nfsm_info *infop)
int t1, i, error = 0;
int trylater_delay;
struct nfsreq *rep;
- int mrest_len;
struct nfsm_info info;
rep = pool_get(&nfsreqpl, PR_WAITOK);
@@ -864,17 +863,11 @@ nfs_request(struct vnode *vp, int procnum, struct nfsm_info *infop)
rep->r_procp = infop->nmi_procp;
rep->r_procnum = procnum;
- mrest_len = 0;
- m = infop->nmi_mreq;
- while (m) {
- mrest_len += m->m_len;
- m = m->m_next;
- }
-
/* empty mbuf for AUTH_UNIX header */
rep->r_mreq = m_gethdr(M_WAIT, MT_DATA);
rep->r_mreq->m_next = infop->nmi_mreq;
- rep->r_mreq->m_pkthdr.len = mrest_len;
+ rep->r_mreq->m_len = 0;
+ m_calchdrlen(rep->r_mreq);
trylater_delay = NFS_MINTIMEO;
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h
index 8a9df640faf..2513c484922 100644
--- a/sys/sys/mbuf.h
+++ b/sys/sys/mbuf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mbuf.h,v 1.237 2018/09/10 12:47:02 bluhm Exp $ */
+/* $OpenBSD: mbuf.h,v 1.238 2018/09/10 16:14:08 bluhm Exp $ */
/* $NetBSD: mbuf.h,v 1.19 1996/02/09 18:25:14 christos Exp $ */
/*
@@ -443,6 +443,7 @@ struct mbuf *m_gethdr(int, int);
struct mbuf *m_inithdr(struct mbuf *);
void m_removehdr(struct mbuf *);
void m_resethdr(struct mbuf *);
+void m_calchdrlen(struct mbuf *);
int m_defrag(struct mbuf *, int);
struct mbuf *m_prepend(struct mbuf *, int, int);
struct mbuf *m_pulldown(struct mbuf *, int, int, int *);