svn commit: r352842 - head/sys/netinet/tcp_stacks
Michael Tuexen
tuexen at FreeBSD.org
Sat Sep 28 13:05:38 UTC 2019
Author: tuexen
Date: Sat Sep 28 13:05:37 2019
New Revision: 352842
URL: https://svnweb.freebsd.org/changeset/base/352842
Log:
Ensure that the INP lock is released before leaving [gs]etsockopt()
for RACK specific socket options.
These issues were found by a syzkaller instance.
Reviewed by: rrs@
Sponsored by: Netflix, Inc.
Differential Revision: https://reviews.freebsd.org/D21825
Modified:
head/sys/netinet/tcp_stacks/rack.c
Modified: head/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- head/sys/netinet/tcp_stacks/rack.c Sat Sep 28 12:02:43 2019 (r352841)
+++ head/sys/netinet/tcp_stacks/rack.c Sat Sep 28 13:05:37 2019 (r352842)
@@ -10261,10 +10261,10 @@ rack_set_sockopt(struct socket *so, struct sockopt *so
break;
case TCP_RACK_TLP_INC_VAR:
/* Does TLP include rtt variance in t-o */
- return (EINVAL);
+ error = EINVAL;
break;
case TCP_RACK_IDLE_REDUCE_HIGH:
- return (EINVAL);
+ error = EINVAL;
break;
case TCP_DELACK:
if (optval == 0)
@@ -10329,6 +10329,7 @@ rack_get_sockopt(struct socket *so, struct sockopt *so
* add a option that is not a int, then this will have quite an
* impact to this routine.
*/
+ error = 0;
switch (sopt->sopt_name) {
case TCP_RACK_DO_DETECTION:
optval = rack->do_detection;
@@ -10398,10 +10399,10 @@ rack_get_sockopt(struct socket *so, struct sockopt *so
break;
case TCP_RACK_TLP_INC_VAR:
/* Does TLP include rtt variance in t-o */
- return (EINVAL);
+ error = EINVAL;
break;
case TCP_RACK_IDLE_REDUCE_HIGH:
- return (EINVAL);
+ error = EINVAL;
break;
case TCP_RACK_MIN_PACE:
optval = rack->r_enforce_min_pace;
@@ -10423,7 +10424,9 @@ rack_get_sockopt(struct socket *so, struct sockopt *so
break;
}
INP_WUNLOCK(inp);
- error = sooptcopyout(sopt, &optval, sizeof optval);
+ if (error == 0) {
+ error = sooptcopyout(sopt, &optval, sizeof optval);
+ }
return (error);
}
More information about the svn-src-all
mailing list