Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
src: Pull up following revision(s) (requested by knakahara in ti...
details: https://anonhg.NetBSD.org/src/rev/bb3e2959368c
branches: netbsd-8
changeset: 318059:bb3e2959368c
user: martin <martin%NetBSD.org@localhost>
date: Wed Apr 11 14:15:45 2018 +0000
description:
Pull up following revision(s) (requested by knakahara in ticket #730):
sys/net/if_l2tp.c: revision 1.22
sys/net/if_l2tp.c: revision 1.23
Improve comment. Pointed out by maxv@n.o, thanks.
Fix previous my mistake and odd unaligned case. Pointed out by maxv@n.o, thanks.
It must be rare case to be required this copy routine...
diffstat:
sys/net/if_l2tp.c | 25 +++++++++++++++++++++----
1 files changed, 21 insertions(+), 4 deletions(-)
diffs (57 lines):
diff -r fbf1ea51908f -r bb3e2959368c sys/net/if_l2tp.c
--- a/sys/net/if_l2tp.c Wed Apr 11 03:00:03 2018 +0000
+++ b/sys/net/if_l2tp.c Wed Apr 11 14:15:45 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_l2tp.c,v 1.11.2.6 2018/04/09 13:40:20 bouyer Exp $ */
+/* $NetBSD: if_l2tp.c,v 1.11.2.7 2018/04/11 14:15:45 martin Exp $ */
/*
* Copyright (c) 2017 Internet Initiative Japan Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.11.2.6 2018/04/09 13:40:20 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.11.2.7 2018/04/11 14:15:45 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -477,11 +477,16 @@
return;
}
+ /*
+ * If the head of the payload is not aligned, align it.
+ */
addr = mtod(m, vaddr_t);
- if ((addr & 0x03) == 0) {
+ if ((addr & 0x03) != 0x2) {
/* copy and align head of payload */
struct mbuf *m_head;
int copy_length;
+ u_int pad = roundup(sizeof(struct ether_header), 4)
+ - sizeof(struct ether_header);
#define L2TP_COPY_LENGTH 60
@@ -504,7 +509,19 @@
}
M_COPY_PKTHDR(m_head, m);
- MH_ALIGN(m_head, L2TP_COPY_LENGTH);
+ /*
+ * m_head should be:
+ * L2TP_COPY_LENGTH
+ * <- + roundup(pad, 4) - pad ->
+ * +-------+--------+-----+--------------+-------------+
+ * | m_hdr | pkthdr | ... | ether header | payload |
+ * +-------+--------+-----+--------------+-------------+
+ * ^ ^
+ * m_data 4 byte aligned
+ */
+ MH_ALIGN(m_head, L2TP_COPY_LENGTH + roundup(pad, 4));
+ m_head->m_data += pad;
+
memcpy(mtod(m_head, void *), mtod(m, void *), copy_length);
m_head->m_len = copy_length;
m->m_data += copy_length;
Home |
Main Index |
Thread Index |
Old Index