aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2023-08-04 23:42:41 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2023-09-06 20:03:18 +0000
commitdd66ba430cb9d4c53fdd583fa2f20521552d58ff (patch)
treebf5365f826f29d8fd5c1ad9fb58b2a7325466c3e /sys
parent16f142865cb8190c733271969aa243a2fc934093 (diff)
downloadsrc-dd66ba430cb9d4c53fdd583fa2f20521552d58ff.tar.gz
src-dd66ba430cb9d4c53fdd583fa2f20521552d58ff.zip
Diffstat (limited to 'sys')
-rw-r--r--sys/netsmb/smb_rq.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/netsmb/smb_rq.c b/sys/netsmb/smb_rq.c
index 5a2ec0e7214a..c55dd1d91891 100644
--- a/sys/netsmb/smb_rq.c
+++ b/sys/netsmb/smb_rq.c
@@ -426,12 +426,18 @@ static int
smb_t2_placedata(struct mbuf *mtop, u_int16_t offset, u_int16_t count,
struct mdchain *mdp)
{
- struct mbuf *m, *m0;
+ struct mbuf *m0;
int len;
+ len = m_length(mtop, NULL);
+ if (offset + count > len)
+ return (EPROTO);
+
m0 = m_split(mtop, offset, M_WAITOK);
- len = m_length(m0, &m);
- m->m_len -= len - count;
+ if (len != offset + count) {
+ len -= offset + count;
+ m_adj(m0, -len);
+ }
if (mdp->md_top == NULL) {
md_initm(mdp, m0);
} else