summaryrefslogtreecommitdiff
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index f1376f373bf7..0c8571735019 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -1133,8 +1133,14 @@ sorflush(so)
socantrcvmore(so);
sbunlock(sb);
asb = *sb;
- bzero(sb, sizeof (*sb));
+ /*
+ * Invalidate/clear most of the sockbuf structure, but keep
+ * its selinfo structure valid.
+ */
+ bzero(&sb->sb_startzero,
+ sizeof(*sb) - offsetof(struct sockbuf, sb_startzero));
splx(s);
+
if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose)
(*pr->pr_domain->dom_dispose)(asb.sb_mb);
sbrelease(&asb, so);