diff options
-rw-r--r-- | sys/kern/uipc_sockbuf.c | 4 | ||||
-rw-r--r-- | sys/kern/uipc_socket2.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c index dc1f4cb..305aaad 100644 --- a/sys/kern/uipc_sockbuf.c +++ b/sys/kern/uipc_sockbuf.c @@ -422,7 +422,9 @@ sbreserve(sb, cc, so, td) * td will only be NULL when we're in an interrupt * (e.g. in tcp_input()) */ - if ((u_quad_t)cc > (u_quad_t)sb_max * MCLBYTES / (MSIZE + MCLBYTES)) + if (sb_max < MSIZE + MCLBYTES) + sb_max = MSIZE + MCLBYTES; + if ((u_quad_t)cc > (u_quad_t)(MCLBYTES * (sb_max / (MSIZE + MCLBYTES)))) return (0); if (!chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, cc, td ? td->td_proc->p_rlimit[RLIMIT_SBSIZE].rlim_cur : RLIM_INFINITY)) { diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index dc1f4cb..305aaad 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -422,7 +422,9 @@ sbreserve(sb, cc, so, td) * td will only be NULL when we're in an interrupt * (e.g. in tcp_input()) */ - if ((u_quad_t)cc > (u_quad_t)sb_max * MCLBYTES / (MSIZE + MCLBYTES)) + if (sb_max < MSIZE + MCLBYTES) + sb_max = MSIZE + MCLBYTES; + if ((u_quad_t)cc > (u_quad_t)(MCLBYTES * (sb_max / (MSIZE + MCLBYTES)))) return (0); if (!chgsbsize(so->so_cred->cr_uidinfo, &sb->sb_hiwat, cc, td ? td->td_proc->p_rlimit[RLIMIT_SBSIZE].rlim_cur : RLIM_INFINITY)) { |