diff options
author | glebius <glebius@FreeBSD.org> | 2005-09-06 17:05:11 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2005-09-06 17:05:11 +0000 |
commit | a1663238688650861d85c502aa4a267d1049211f (patch) | |
tree | 13497bb0b8445c091d171a3360f4467e0c6e22de /sys/kern | |
parent | 807987bb242537fd19578f0638c5911467671a7b (diff) | |
download | FreeBSD-src-a1663238688650861d85c502aa4a267d1049211f.zip FreeBSD-src-a1663238688650861d85c502aa4a267d1049211f.tar.gz |
In soreceive(), when a first mbuf is removed from socket buffer use
sockbuf_pushsync(). Previous manipulation could lead to an inconsistent
mbuf.
Reviewed by: rwatson
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/uipc_socket.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index c15e5e1..d2e4556 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1279,14 +1279,7 @@ dontblock: so->so_rcv.sb_mb = m_free(m); m = so->so_rcv.sb_mb; } - if (m != NULL) { - m->m_nextpkt = nextrecord; - if (nextrecord == NULL) - so->so_rcv.sb_lastrecord = m; - } else { - so->so_rcv.sb_mb = nextrecord; - SB_EMPTY_FIXUP(&so->so_rcv); - } + sockbuf_pushsync(&so->so_rcv, nextrecord); SBLASTRECORDCHK(&so->so_rcv); SBLASTMBUFCHK(&so->so_rcv); } |