2016-07-05 15:36 GMT+02:00, Claudio Jeker <[email protected]>:
> On Tue, Jul 05, 2016 at 07:22:27AM -0600, Bob Beck wrote:
>> Makes sense to me. Others?
>>
>>
>> On Tue, Jul 5, 2016 at 4:08 AM, Simon Mages <[email protected]>
>> wrote:
>> > At the moment the buffersize will be set to the default even if the
>> > current value
>> > is smaller.
>> >
>> > The following diff fixes this problem.
>> >
>> > Index: netinet/tcp_usrreq.c
>> > ===================================================================
>> > RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
>> > retrieving revision 1.131
>> > diff -u -p -u -p -r1.131 tcp_usrreq.c
>> > --- netinet/tcp_usrreq.c 18 Jun 2016 10:36:13 -0000 1.131
>> > +++ netinet/tcp_usrreq.c 5 Jul 2016 09:26:24 -0000
>> > @@ -979,10 +979,11 @@ tcp_update_sndspace(struct tcpcb *tp)
>> > struct socket *so = tp->t_inpcb->inp_socket;
>> > u_long nmax;
>> >
>> > - if (sbchecklowmem())
>> > + if (sbchecklowmem()) {
>> > /* low on memory try to get rid of some */
>> > - nmax = tcp_sendspace;
>> > - else if (so->so_snd.sb_wat != tcp_sendspace)
>> > + if (so->so_snd.sb_hiwat < nmax)
>> > + nmax = tcp_sendspace;
>> > + } else if (so->so_snd.sb_wat != tcp_sendspace)
>> > /* user requested buffer size, auto-scaling disabled */
>> > nmax = so->so_snd.sb_wat;
>> > else
>
> Here, nmax can be used uninitialized now.
> It needs be initialized to something maybe sb_hiwat?
Thats true, i found also another bug in this diff, the new one follows.
>
>> > @@ -1017,10 +1018,11 @@ tcp_update_rcvspace(struct tcpcb *tp)
>> > struct socket *so = tp->t_inpcb->inp_socket;
>> > u_long nmax = so->so_rcv.sb_hiwat;
>> >
>> > - if (sbchecklowmem())
>> > + if (sbchecklowmem()) {
>> > /* low on memory try to get rid of some */
>> > - nmax = tcp_recvspace;
>> > - else if (so->so_rcv.sb_wat != tcp_recvspace)
>> > + if (tcp_recvspace < nmax)
>> > + nmax = tcp_recvspace;
>> > + } else if (so->so_rcv.sb_wat != tcp_recvspace)
>> > /* user requested buffer size, auto-scaling disabled */
>> > nmax = so->so_rcv.sb_wat;
>> > else {
>> >
>
> Here there is no issue.
>
> --
> :wq Claudio
>
Index: netinet/tcp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
retrieving revision 1.131
diff -u -p -u -p -r1.131 tcp_usrreq.c
--- netinet/tcp_usrreq.c 18 Jun 2016 10:36:13 -0000 1.131
+++ netinet/tcp_usrreq.c 5 Jul 2016 13:41:49 -0000
@@ -977,12 +977,13 @@ void
tcp_update_sndspace(struct tcpcb *tp)
{
struct socket *so = tp->t_inpcb->inp_socket;
- u_long nmax;
+ u_long nmax = so->so_snd.sb_hiwat;
- if (sbchecklowmem())
+ if (sbchecklowmem()) {
/* low on memory try to get rid of some */
- nmax = tcp_sendspace;
- else if (so->so_snd.sb_wat != tcp_sendspace)
+ if (tcp_sendspace < nmax)
+ nmax = tcp_sendspace;
+ } else if (so->so_snd.sb_wat != tcp_sendspace)
/* user requested buffer size, auto-scaling disabled */
nmax = so->so_snd.sb_wat;
else
@@ -1017,10 +1018,11 @@ tcp_update_rcvspace(struct tcpcb *tp)
struct socket *so = tp->t_inpcb->inp_socket;
u_long nmax = so->so_rcv.sb_hiwat;
- if (sbchecklowmem())
+ if (sbchecklowmem()) {
/* low on memory try to get rid of some */
- nmax = tcp_recvspace;
- else if (so->so_rcv.sb_wat != tcp_recvspace)
+ if (tcp_recvspace < nmax)
+ nmax = tcp_recvspace;
+ } else if (so->so_rcv.sb_wat != tcp_recvspace)
/* user requested buffer size, auto-scaling disabled */
nmax = so->so_rcv.sb_wat;
else {