git: bed7633b1089 - main - tcp: tcp: allow SOL_SOCKET-level socket options via sysctl interface
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 09 Dec 2023 12:03:58 UTC
The branch main has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=bed7633b108930e9e9d2478c75556035938d4e88
commit bed7633b108930e9e9d2478c75556035938d4e88
Author: Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2023-12-09 11:57:19 +0000
Commit: Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2023-12-09 12:03:51 +0000
tcp: tcp: allow SOL_SOCKET-level socket options via sysctl interface
When using the sysctl interface for setting a SOL_SOCKET-level socket
option, the TCP handler refers to the IP handler, which only handles
SO_SETFIB and SO_MAX_PACING_RATE.
So call sosetopt(), which handles all SOL_SOCKET-level options.
Then you can use tcpsso with SOL_SOCKET-level socket options as
expected.
Reported by: rscheff
Reviewed by: glebius, rscheff
MFC after: 1 week
Sponsored by: Netflix, Inc.
Differential Revision: https://reviews.freebsd.org/D42985
---
sys/netinet/in_pcb.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 797c0dc445dd..0d763184f68c 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -2984,7 +2984,11 @@ sysctl_setsockopt(SYSCTL_HANDLER_ARGS, struct inpcbinfo *pcbinfo,
so = inp->inp_socket;
KASSERT(so != NULL, ("inp_socket == NULL"));
soref(so);
- error = (*ctloutput_set)(inp, &sopt);
+ if (params->sop_level == SOL_SOCKET) {
+ INP_WUNLOCK(inp);
+ error = sosetopt(so, &sopt);
+ } else
+ error = (*ctloutput_set)(inp, &sopt);
sorele(so);
break;
}