aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Karels <karels@FreeBSD.org>2022-05-09 12:19:52 +0000
committerMike Karels <karels@FreeBSD.org>2022-05-09 13:46:06 +0000
commit1de9aa4d4f7938f36e6485dad817908a6e45bb32 (patch)
treef4336d5832027f838e01e023909f1fbdf1863fa5
parentdc484aed0a014de0fdf33d972c36413da6903a2e (diff)
downloadsrc-1de9aa4d4f7938f36e6485dad817908a6e45bb32.tar.gz
src-1de9aa4d4f7938f36e6485dad817908a6e45bb32.zip
genet: fix output packet corruption in uncommon case
The code for the "shift" block in the COPY macro set the pointer for the next copy block to the wrong value. In this case, the link-layer header would be overwritten by the network-layer header. This case is difficult or impossible to exercise in the current driver without changing the value of the hw.genet.tx_hdr_min sysctl. Correct the pointer. While here, remove a line in the macro that was marked "unneeded", which was actually wrong. PR: 263824 Submitted by: jiahali@blackberry.com MFC after: 2 weeks
-rw-r--r--sys/arm64/broadcom/genet/if_genet.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c
index 47ff3a484387..3e22f387bf61 100644
--- a/sys/arm64/broadcom/genet/if_genet.c
+++ b/sys/arm64/broadcom/genet/if_genet.c
@@ -1254,11 +1254,10 @@ gen_parse_tx(struct mbuf *m, int csum_flags)
m0->m_data = m0->m_pktdat; \
bcopy(p0, mtodo(m0, sizeof(struct statusblock)),\
m0->m_len - sizeof(struct statusblock)); \
- copy_p = mtodo(m0, sizeof(struct statusblock)); \
+ copy_p = mtodo(m0, m0->m_len); \
} \
bcopy(p, copy_p, hsize); \
m0->m_len += hsize; \
- m0->m_pkthdr.len += hsize; /* unneeded */ \
m->m_len -= hsize; \
m->m_data += hsize; \
} \