mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
Fix sosend_generic() so that it can handle a list of ext_pgs mbufs.
Without this patch, sosend_generic() will try to use top->m_pkthdr.len, assuming that the first mbuf has a pkthdr. When a list of ext_pgs mbufs is passed in, the first mbuf is not a pkthdr and cannot be post-r359919. As such, the value of top->m_pkthdr.len is bogus (0 for my testing). This patch fixes sosend_generic() to handle this case, calculating the total length via m_length() for this case. There is currently nothing that hands a list of ext_pgs mbufs to sosend_generic(), but the nfs-over-tls kernel RPC code in projects/nfs-over-tls will do that and was used to test this patch. Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D24568
This commit is contained in:
parent
75ce42271a
commit
0306689367
1 changed files with 3 additions and 1 deletions
|
|
@ -1557,8 +1557,10 @@ sosend_generic(struct socket *so, struct sockaddr *addr, struct uio *uio,
|
|||
#endif
|
||||
if (uio != NULL)
|
||||
resid = uio->uio_resid;
|
||||
else
|
||||
else if ((top->m_flags & M_PKTHDR) != 0)
|
||||
resid = top->m_pkthdr.len;
|
||||
else
|
||||
resid = m_length(top, NULL);
|
||||
/*
|
||||
* In theory resid should be unsigned. However, space must be
|
||||
* signed, as it might be less than 0 if we over-committed, and we
|
||||
|
|
|
|||
Loading…
Reference in a new issue