svn commit: r194662 - head/sys/kern
Andre Oppermann
andre at FreeBSD.org
Mon Jun 22 21:46:41 UTC 2009
Author: andre
Date: Mon Jun 22 21:46:40 2009
New Revision: 194662
URL: http://svn.freebsd.org/changeset/base/194662
Log:
In sbappendstream_locked() demote all incoming packet mbufs (and
chains) to pure data mbufs using m_demote(). This removes the
packet header and all m_tag information as they are not meaningful
anymore on a stream socket where mbufs are linked through m->m_next.
Strictly speaking a packet header can be only ever valid on the first
mbuf in an m_next chain.
sbcompress() was doing this already when the mbuf chain layout lent
itself to it (e.g. header splitting or merge-append), just not
consistently.
This frees resources at socket buffer append time instead of at
sbdrop_internal() time after data has been read from the socket.
For MAC the per packet information has done its duty and during
socket buffer appending the policy of the socket itself takes over.
With the append the packet boundaries disappear naturally and with
it any context that was based on it. None of the residual information
from mbuf headers in the socket buffer on stream sockets was looked at.
Modified:
head/sys/kern/uipc_sockbuf.c
Modified: head/sys/kern/uipc_sockbuf.c
==============================================================================
--- head/sys/kern/uipc_sockbuf.c Mon Jun 22 21:42:57 2009 (r194661)
+++ head/sys/kern/uipc_sockbuf.c Mon Jun 22 21:46:40 2009 (r194662)
@@ -528,6 +528,9 @@ sbappendstream_locked(struct sockbuf *sb
SBLASTMBUFCHK(sb);
+ /* Remove all packet headers and mbuf tags to get a pure data chain. */
+ m_demote(m, 1);
+
sbcompress(sb, m, sb->sb_mbtail);
sb->sb_lastrecord = sb->sb_mb;
More information about the svn-src-all
mailing list