summaryrefslogtreecommitdiffstats
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.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 9719b79..3d15c27 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -158,6 +158,12 @@ sodealloc(so)
{
so->so_gencnt = ++so_gencnt;
+ if (so->so_rcv.sb_hiwat)
+ (void)chgsbsize(so->so_cred->cr_uid,
+ -(rlim_t)so->so_rcv.sb_hiwat);
+ if (so->so_snd.sb_hiwat)
+ (void)chgsbsize(so->so_cred->cr_uid,
+ -(rlim_t)so->so_snd.sb_hiwat);
crfree(so->so_cred);
zfreei(so->so_zone, so);
}
@@ -212,7 +218,7 @@ sofree(so)
so->so_state &= ~SS_INCOMP;
so->so_head = NULL;
}
- sbrelease(&so->so_snd);
+ sbrelease(&so->so_snd, so);
sorflush(so);
sodealloc(so);
}
@@ -922,7 +928,7 @@ sorflush(so)
splx(s);
if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose)
(*pr->pr_domain->dom_dispose)(asb.sb_mb);
- sbrelease(&asb);
+ sbrelease(&asb, so);
}
/*
@@ -1030,8 +1036,8 @@ sosetopt(so, sopt)
case SO_SNDBUF:
case SO_RCVBUF:
if (sbreserve(sopt->sopt_name == SO_SNDBUF ?
- &so->so_snd : &so->so_rcv,
- (u_long) optval) == 0) {
+ &so->so_snd : &so->so_rcv, (u_long)optval,
+ so, curproc) == 0) {
error = ENOBUFS;
goto bad;
}
OpenPOWER on IntegriCloud