summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorDavid Gwynne <dlg@cvs.openbsd.org>2019-09-12 01:27:03 +0000
committerDavid Gwynne <dlg@cvs.openbsd.org>2019-09-12 01:27:03 +0000
commitf12391556302ab6d63daed00e514b6cef394ced3 (patch)
tree5e79c967eb8e1b09d700eb41434e12dfa46e8357 /sys
parentef6a9df6d7c24b153651f4f7eb2080102c789a24 (diff)
let userland write up to hardmtu bytes, not just mtu bytes.
this brings tun in line with pretty much every other driver we have where we let interfaces rx whatever they can. while here make sure userland provides enough bytes for the link header, which is the 4 byte address family for tun(4), and an ethernet header for tap(4).
Diffstat (limited to 'sys')
-rw-r--r--sys/net/if_tun.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index 8fa1bfb874b..a405633de5f 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_tun.c,v 1.187 2019/06/10 21:55:16 dlg Exp $ */
+/* $OpenBSD: if_tun.c,v 1.188 2019/09/12 01:27:02 dlg Exp $ */
/* $NetBSD: if_tun.c,v 1.24 1996/05/07 02:40:48 thorpej Exp $ */
/*
@@ -838,8 +838,8 @@ tun_dev_write(struct tun_softc *tp, struct uio *uio, int ioflag)
ifp = &tp->tun_if;
TUNDEBUG(("%s: tunwrite\n", ifp->if_xname));
- if (uio->uio_resid == 0 || uio->uio_resid > ifp->if_mtu +
- (tp->tun_flags & TUN_LAYER2 ? ETHER_HDR_LEN : sizeof(*th))) {
+ if (uio->uio_resid < ifp->if_hdrlen ||
+ uio->uio_resid > (ifp->if_hdrlen + ifp->if_hardmtu)) {
TUNDEBUG(("%s: len=%d!\n", ifp->if_xname, uio->uio_resid));
return (EMSGSIZE);
}