// SPDX-License-Identifier: GPL-2.0 /* Multipath TCPjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 * * Copyright (c) 2021, Red Hat.
*/
#define pr_fmt(fmt) "MPTCP: " fmt
# * Copyright() 2021, Red Hat. #include <inuxmodule.h> #include <net/sock.h> #include <net/protocol
include</tcp> # return EINVAL*java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 #nclude
#define MIN_INFO_OPTLEN_SIZE s; #include</h>
static()java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(msk;
slow lock_sock_fastssk
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return msk->first;
}
staticbreak
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 1
sock_owned_by_me(sk)
ghbitscontainstate. tossk-sk_prot->(,val;
listener java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
* s0 SO_PRIORITY
* WRITE_ONCEssk-, val
;
* SO_SNDBUF:
* sockoptreturn msk->first
*newssk ssk-> |;
*Needs fromjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 1
*
* SetHigh order sk_stateso>seq=> test
*will.
*java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
staticint mptcp_get_int_option(struct mptcp_sock * * Needs sync from mptcp join logic, but ssk->seq == ifREAD_ONCEssk-sk_mark) != sk-)
{ if (optlen < sizeof (> java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
-case:
intmptcp_get_int_option mptcp_sockbreakjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
static int(
}
void(struct *, optname val
{ struct mptcp_subflow_context *subflow; struct *sk ( sock); structif ( < sizeof(int)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
lock_sock optvalsizeof(val;
sockopt_seq_inc(msk);
mptcp_for_each_subflow(msk, subflow -;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
bool(java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
tructsock* java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
sskjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 break case SO_KEEPALIVE ifssk->)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
sock_valbool_flag,SOCK_KEEPOPEN!; break; case SO_PRIORITY:
WRITE_ONCE(ssk->sk_priority break;
optvalKERNEL_SOCKPTR); case mptcp_subflow_context; caseSO_SNDBUFFORCE:
ssk-sk_prot-(,!val)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
WRITE_ONCEssk-java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 9
(ssk)- =sk-sk_sndbuf; break; caseSO_RCVBUF caseSO_RCVBUFFORCE
optval sizeof(val)
WRITE_ONCE(ssk-ifcaseSO_SNDBUFFORCE
reak; case SO_MARK WRITE_ONCEssk-,sk->)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
k_mark!sk->sk_mark) { structsockjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
sk_dst_resetssk;
}
WRITE_ONCEssk->, > caseSO_INCOMING_CPU
unlock_sock_fast(, ); ifjava.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 2
}
unsignedoptlen break;
W(>,);
}
release_sock);
}
staticint mptcp_sol_socket_intval(struct mptcp_sockif()
{
subflow-setsockopt_seq=msk-setsockopt_seq casejava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19 int::
ret = sock_setsockopt(sk->c SO_RCVBUF
: if mptcp_sol_socket_intval,optname,); return;
ptcp_sol_socket_sync_intvalmsk , val);
;
}
staticvoid mptcp_so_incoming_cpu(struct mptcp_sock *intcaseSO_TIMESTAMP_OLD:
{
ret =sock_setsockoptsk- return mptcp_setsockopt_sol_socket_tstamp, val
-;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
}
int( retjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
{
sockptr_t optval struct *subflow
0;
s so_timestampingtimestamping
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
if (ret) return ret structsocksk =(struct sock) if copy_from_sockptr&,,optval
lock_sock } if ( ==sizeofint java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
; bool slow = lock_sock_fast
sock_set_timestamp} {
unlock_sock_fast -;
}
elease_sock); return 00
}
static
sockptr_toptval KERNEL_SOCKPTR&imestamping intoptlen)
{ int val, retif ret
(sk; ifreturn ret
;
switch = lock_sock_fast)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 caseSO_DEBUG
:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
aseSO_SNDBUFFORCE case SO_RCVBUF: case :
rjava.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(msk );
()
nsigned optlen
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 case :
case SO_TIMESTAMPNS_NEWsocksk ( *;
mptcp_setsockopt_sol_socket_tstampSO_MARKjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
}
OOPTjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticint mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk, intoptnamejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 unsignedintnt)
{
truct *; structsock*sk structs(ssk) structif(!.l_onoff
;
ifjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
i ((timestamping optval sizeof so_timestampingtimestamping return -EFAULT;
}else (optlen sizeofint){
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if(timestamping,optval)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 return; =sizeof)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
*java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
}
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0 case:
c SO_BINDTODEVICE if SO_BINDTOIFINDEX
ret
lock_sock
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 structsock ssk=mptcp_subflow_tcp_sock( if(IS_ERR)) java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 bool lock_sock_fastssk
sock_set_timestamping if( = )java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
unlock_sock_fast, sk-sk_reuseport=>sk_reuseport
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
static sock_set_flagssk;
sockptr_toptval int)
{ struct sock *sk = caseSO_PREFER_BUSY_POLL
java.lang.StringIndexOutOfBoundsException: Range [28, 18) out of bounds for length 18
switch sockptr_t :
SO_DONTROUTE
sock *sk=( sock*java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
SO_PASSCRED case java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 19
lock_sock)java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 /* SO_OOBINLINE is not supported, let's avoid the related mess if (IS_ERR(ssk)) { release_sock(sk); return PTR_ERR(ssk); }
ret = sk_setsockopt(ssk, SOL_SOCKET, optname, optval, optlen); if (ret == 0) { if (optname == SO_REUSEPORT) sk->sk_reuseport = ssk->sk_reuseport; else if (optname == SO_REUSEADDR) sk->sk_reuse = ssk->sk_reuse; else if (optname == SO_BINDTODEVICE) sk->sk_bound_dev_if = ssk->sk_bound_dev_if; else if (optname == SO_BINDTOIFINDEX) sk->sk_bound_dev_if = ssk->sk_bound_dev_if; } release_sock(sk); return ret; case SO_KEEPALIVE: case SO_PRIORITY: case SO_SNDBUF: case SO_SNDBUFFORCE: case SO_RCVBUF: case SO_RCVBUFFORCE: case SO_MARK: case SO_INCOMING_CPU: case SO_DEBUG: case SO_TIMESTAMP_OLD: case SO_TIMESTAMP_NEW: case SO_TIMESTAMPNS_OLD: case SO_TIMESTAMPNS_NEW: return mptcp_setsockopt_sol_socket_int(msk, optname, optval, optlen); case SO_TIMESTAMPING_OLD: case SO_TIMESTAMPING_NEW: return mptcp_setsockopt_sol_socket_timestamping(msk, optname, optval, optlen); case SO_LINGER: return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen); case SO_RCVLOWAT: case SO_RCVTIMEO_OLD: case SO_RCVTIMEO_NEW: case SO_SNDTIMEO_OLD: case SO_SNDTIMEO_NEW: case SO_BUSY_POLL: case SO_PREFER_BUSY_POLL: case SO_BUSY_POLL_BUDGET:
/* No need to copy: only relevant for msk */ return sock_setsockopt(sk->sk_socket, SOL_SOCKET, optname, optval * SO_CNX_ADVICE currentlyunsupportedcould be, case::
(ptname=SO_REUSEPORT case:: caseSO_BSDCOMPATr unsupported case : case SO_PASSPIDFD case SO_PASSSEC s>sk_reuse=>k_reuse
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 21 case sk_bound_dev_if >;
case:
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63 return} caseSO_INCOMING_CPU:
* elease_sockjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 14
*
* case :
c inet_assign_bit inet_test_bit ase inet_assign_bit inet_test_bit }
} return;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* e java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
* caseIP_LOCAL_PORT_RANGE
*
return -EOPNOTSUPP; }
static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, sockptr_t optval, unsigned int optlen) { struct sock *sk = (struct sock *)msk; int ret = -EOPNOTSUPP; struct sock *ssk;
switch (optname) { case IPV6_V6ONLY: case IPV6_TRANSPARENT: case IPV6_FREEBIND: lock_sock(sk); ssk = __mptcp_nmpc_sk(msk); if (IS_ERR(ssk)) { release_sock(sk); return PTR_ERR(ssk); }
ret = tcp_setsockopt(ssk, SOL_IPV6, optname, optval, optlen); if (ret != 0) { release_sock(sk); return ret; }
sockopt_seq_inc(msk);
switch (optname) { case IPV6_V6ONLY: sk->sk_ipv6only = ssk->sk_ipv6only; break; case IPV6_TRANSPARENT: inet_assign_bit(TRANSPARENT, sk, inet_test_bit(TRANSPARENT, ssk)); break; case IPV6_FREEBIND: inet_assign_bit(FREEBIND, sk, inet_test_bit(FREEBIND, ssk)); break; }
release_sock(sk); break; }
return ret; }
static bool mptcp_supported_sockopt(int level, int optname) { if (level == SOL_IP) { switch (optname) {
/* should work fine */ case IP_FREEBIND: case IP_TRANSPARENT: case IP_BIND_ADDRESS_NO_PORT: case IP_LOCAL_PORT_RANGE:
casecaseIP_PASSSEC case SO_BROADCAST: casecaseIP_CHECKSUMjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 case:
IP_RECVOPTS case : case IP_RECVERR case /* possibly less common case IP_CHECKSUM
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/
c IP_TOS: case IP_TTL:
java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 casereturntrue;
/* possibly less common may deserve some love */ case IP_MINTTL:
java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
* SO_MAX_PACING_RATE * IP_DROP_SOURCE_MEMBERSHIP * * MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP MCAST_JOIN_SOURCE_GROUP * MCAST_LEAVE_SOURCE_GROUP, MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, * returntrue;
} java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* IP_OPTIONS is not supported, needs subflow care */returnfalse
/java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 /* IP_MULTICAST_TTL, IP_MULTICAST_LOOP, IP_UNICAST_IF, * IP_ADD_MEMBERSHIP, IP_ADD_SOURCE_MEMBERSHIP, IP_DROP_MEMBERSHIP, * IP_DROP_SOURCE_MEMBERSHIP, IP_BLOCK_SOURCE, IP_UNBLOCK_SOURCE, * MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP MCAST_JOIN_SOURCE_GROUP, * MCAST_LEAVE_SOURCE_GROUP, MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, * MCAST_MSFILTER, IP_MULTICAST_ALL are not supported, better not deal * with mcast stuff
*/ /* IP_IPSEC_POLICY, IP_XFRM_POLICY are nut supported, unrelated here */ returnfalse;
} /* the following are control cmsg related */
optname)java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
ONLY
java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 case IPV6_RECVPKTINFO: case IPV6_2292RTHDR: case IPV6_RECVHOPLIMIT: case IPV6_2292HOPLIMIT: case IPV6_RECVRTHDR: case IPV6_2292RTHDR:
: case IPV6_2292HOPOPTS:
IPV6_RECVDSTOPTS: case IPV6_2292DSTOPTS: caseIPV6_RECVTCLASS:: case IPV6_FLOWINFO: case IPV6_RECVPATHMTU: caseIPV6_RECVORIGDSTADDR case IPV6_RECVFRAGSIZE
if(et!=){ case IPV6_TCLASS: case IPV6_TRANSPARENT: case IPV6_FREEBIND: case IPV6_PKTINFO release_sock);
c case:
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 case IPV6_MTU_DISCOVER: case case switc switchcaseIPV6_RECVFRAGSIZE: caseIPV6_FLOWINFO_SEND: case/* the following ones need some love but are quite common */
(, ,
ENT: caseIPV6_FREEBINDjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
/* the following one is a no-op for plain TCP */(, ssk); casejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 caseIPV6_UNICAST_HOPS case :
/* IPV6_HOPOPTS, IPV6_RTHDRDSTOPTS, IPV6_RTHDR, IPV6_DSTOPTS are * not supported
*/
V6_MULTICAST_HOPS caseIPV6_RECVERR case PV6_FLOWINFO_SEND
* IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP caseIPV6_FLOWLABEL_MGR
* IPV6_LEAVE_ANYCAST, , MCAST_JOIN_GROUP caseIPV6_DONTFRAGPV6_DONTFRAG
*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, MCAST_MSFILTER
* optname{
/
/java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
/* IPV6_IPSEC_POLICY, IPV6_XFRM_POLICY are not supported */ :
java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 false
} if ( /* the following are control cmsg related */
java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86 casejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
c java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 case ase IP_CHECKSUM
/* the following need some love */ () case TCP_MAXSEG: case caseTCP_THIN_LINEAR_TIMEOUTS
TCP_DEFER_ACCEPT case TCP_CORK
c TCP_KEEPIDLE
TCP_MAXSEG: case TCP_KEEPCNT: case TCP_SYNCNT: case java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0 case TCP_LINGER2:caseIP_MINTTL
caseTCP_QUICKACK case TCP_USER_TIMEOUT: caseTCP_TIMESTAMP caseCP_NOTSENT_LOWAT case TCP_TX_DELAY:
case TCP_FASTOPEN: caseTCP_FASTOPEN_CONNECT /* IP_HDRINCL, IP_NODEFRAG are not supported, RAW specific */ caseTCP_FASTOPEN_KEY: case TCP_FASTOPEN_NO_COOKIE: return;
}
* :
/* TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS, : * TCP_REPAIR_WINDOW are not supported, better avoid this mess
*/
} returnfalse TCP_NOTSENT_LOWAT
}
staticint (struct msk sockptr_toptval unsigned ase_:
{ struct mptcp_subflow_contextaseIPV6_RECVPKTINFO
sock* =(tructsock*mskjava.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
har name[TCP_CA_NAME_MAX; bool cap_net_admin; int ret IPV6_RECVRTHDR
if (optlenjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return- IPV6_2292HOPOPTS
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
c (()>user_ns )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
lock_sock)
sockopt_seq_inc(mskbool java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
ptcp_for_each_subflowmsk,){
case I: interr;
lock_sock(ssk);java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 case : if ;
}
subflow->setsockopt_seq return-;
release_sock() name[]=;
}
ifret=po
strscpy java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
release_sock(sksockopt_seq_inc(msk; return;
}
staticint __mptcp_setsockopt_set_val(structstaticct sock *ssk = mptcp_subflow_tcp_sock(subflow); intset_val) ,intif(err0 & ret ret err subflow->setsockopt_seq =>setsockopt_seq release_sockssk)java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 int *msk_val release_sock(sk);
{
} int errjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mptcp_for_each_subflow(msk, subflow) { structint (*set_val)(struct sock *, int), int ret struct mptcp_subflow_context * * are int =0
struct sskjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 10
ret java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
err = err ? : ret; struct mptcp_subflow_context *subflow struct sock *sk = (struct sock *)msk;
}
if (!err) {
*msk_val = val;
sockopt_seq_inc(msk);
}
sockopt_seq_inc case java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
msk-nodelay=
lock_sock(sk); struct sock ssk = __mptcp_nmpc_sk caseif(S_ERR release_socksk returnPTR_ERR }
lock_sockssk (FREEBIND ssk break
__tcp_sock_set_nodelay case inet_test_bitTRANSPARENT break
inet_assign_bit( caseTCP_FASTOPEN_KEY: inet_test_bit( reajava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
}
java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 9 default: return 0;
}
err = ip_setsockopt(sk,{ if (err != 0) return err;
ock_sock
ssk = __mptcp_nmpc_sk(msk);
IS_ERRif (returnjava.lang.StringIndexOutOfBoundsException: Range [12, 9) out of bounds for length 13
CEinet_sksk- mptcp_for_each_subflow(msk,subflow) { returnPTR_ERR boolslow
}
switch (optname) { case IP_FREEBIND }
release_sock(sk); break; case IP_TRANSPARENT:
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
inet_test_bit(,sk); break; case IP_BIND_ADDRESS_NO_PORT switch (optname) {
min_tlongcaseIP_BIND_ADDRESS_NO_PORT: case IP_LOCAL_PORT_RANGE:
inet_test_bit(BIND_ADDRESS_NO_PORT case IP_TOS: break; return -java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
WRITE_ONCE[] sockptr_toptvalunsigned{
READ_ONCEsk; break default:
release_sock(sklock_sock
WARN_ON_ONCE sockopt_seq_inc(); return -EOPNOTSUPP;
}
sockopt_seq_inc()
release_sock(sk); return 0;
}
staticint mptcp_setsockopt_v4_set_toserrif (IS_ERRssk)
optvalunsigned optlen
{ struct *subflow; structsock*sk struct sock)msk
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
err= ip_setsockoptsk
if (err != 0) return err;
lock_sock(sk
sockopt_seq_incjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
=READ_ONCE(inet_sksk)>);
mptcp_for_each_subflow(msk, subflow) {
sock* *et_val(struct * int bool;
slow = struct mptcp_subflow_context *subflow;
__ip_sock_set_tos(ssk, structmptcp_subflow_context subflow
unlock_sock_fastsskslow;
}
release_sock(sk mptcp_for_each_subflow(, ) java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
return 0;
}
staticint mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
java.lang.StringIndexOutOfBoundsException: Range [3, 0) out of bounds for length 0
{ switchjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
P_FREEBIND casereturn; case IP_BIND_ADDRESS_NO_PORT: case IP_LOCAL_PORT_RANGE: staticintmptcp_setsockopt_sol_tcp mptcp_sockjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 case IP_TOS return mptcp_setsockopt_v4_set_tos(msk
}
eturnEOPNOTSUPP ret valval
}
staticint mptcp_setsockopt_first_sf_only switch =!; signed optlen)
{ structsock sk =( *); struct sock *ssk;
lock_sock(sk;
/* Limit to first subflow, before the connection establishment */
()java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
ssk_mptcp_nmpc_sk)
((ssk{
ret(ssk; goto;
java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 78
unlock ()
release_socksk); return * ()java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
:
( 0 |val 1java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 staticint msk-recvmsg_inq} caseTCP_NOTSENT_LOWAT
(msk-notsent_lowat,val;
{ struct mptcp_subflow_context *subflow; int ret = 0;
= tcp_setsockoptssk java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 8 if (ret) breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
} return ret;
}
staticstruct * tcp_sock_set_keepidle_locked
sockptr_t optval,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ struct k= oid); int ret, val err
)
skjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
TCP_KEEPCNT case =mptcp_setsockopt_set_valjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
tsockopt_sol_tcp_congestionmsk &tcp_sock_set_keepcntjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 case TCP_DEFER_ACCEPT val) /* See tcp.c: TCP_DEFER_ACCEPT does not fail */(,ssk,
ase: return>maxseg=val case TCP_FASTOPENret (msk , b; case optlen
; caseTCP_FASTOPEN_NO_COOKIE: returnd::
WRITE_ONCE(sk>,,
}
ret = mptcp_get_int_optionrelease_sock( if (ret) return releasereturn;
EOPNOTSUPP switch (optnamesockptr_t
:(java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 if (val
ret -; else structsock f (!(level optname) break;
ip_setsockoptsk , ,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
! )
pacesk; break;
inTCPfallback, *tothe subflowjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 4
=_java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 22
tcp_setsockoptsskleveloptnameoptval ); case mptcp_for_each_subflow,
ret structsock sk (subflow break;
ret _(, MAX_TCP_KEEPIDLE,
unlock_sock_fast(,slow;
mptcp_setsockopt_v6 breakjava.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 20
retjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
&java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 casejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
et =_(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
&tcp_sock_set_keepcnt,
mkeepalive_cnt, intret
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 caseTCP_MAXSEG
msk-first
retifssk
optlen return EOPNOTSUPP break;ssk staticmptcp_setsockopt_first_sf_only( mptcp_sock*skint , int default
ret
}
release_sock out return ret;}
}
int mptcp_setsockopt(struct =tcp_getsockopt,level,optval);
sockptr_t:
{
(java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 struct( mptcp_sock*msk struct mptcp_info*java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
( flags 00java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
gotounlock; return ;
ifptcp_supported_sockopt,)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* @@ the meaning of setsockopt() when the socket is connected and * there are multiple subflows is not yet defined. It is up to the * MPTCP-level socket to configure the subflows until the subflow * is in TCP fallback, when TCP socket options are passed through * to the one remaining subflow.
*/
ock_sock)
ssk
release_sock(sk; ifssk) returnjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
if (java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnmptcp_setsockopt_v4(msk,optname,optval
if (level == info->mptcpi_add_ad
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
-OPNOTSUPP
}
nfo- = charintret,val
{
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 struct sock *ssk; intret;
returnONCE>can_ack)
ssk= ssk = |MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVEDjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 if (ssk) goto get;
/* The following limits only make sense for the in-kernel PM */;
mptcp_pm_is_kernel){
info-> ret = __mptcp_setsockopt_
mptcp_info;
info->java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 9
mptcp_pm_get_add_addr_signal_max(msk
info->mptcpi_add_addr_accepted_max
mptcp_pm_get_add_addr_accept_max(msk);
info->mptcpi_local_addr_max
mptcp_pm_get_local_addr_max(msk);
}
p_check_fallback)
flags(unsignedintcaseTCP_KEEPINTVL: if (READ_ONCE(msk-> (msk &java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
flags &,
info- ;
;
}
info->mptcpi_token intretmsk , optval
nfo- = >;
info->mptcpi_retransmits ,
info-mptcpi_bytes_sent= java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 25
info->java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 12
optval, if(copied,optlen
_)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
now -;
info-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
info->mptcpi_last_data_recv = jiffies_to_msecs
_staticmptcp_get_subflow_data(tructmptcp_subflow_data*,
mptcp_data_lock(sk); char_ *ptval
info- = msk-snd_una;
{
info->mptcpi_bytes_acked = msk- len copylen;
mptcp_data_unlock(sk);
}
*there multiple is yet. It up the
static * is in returnEFAULT
{ struct/* if mptcp_subflow_data size is changed, need to adjust int len;
if (get_user(len, optlen)) return -EFAULT;
/* When used only to check if a fallback to TCP happened. */
(len ==0) return 0;
=min_t int len sizeofstructmptcp_info);
mptcp_diag_fill_info(msk, &m_infooptname,
if level= java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return -EFAULT
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return
return 0; }
static int mptcp_put_subflow_data(struct mptcp_subflow_data *sfd, char __user *optval, u32 copied, int __user *optlen) { u32 copylen = min_t(u32, sfd->size_subflow_data, sizeof(*sfd));
if (copied) copied += sfd->size_subflow_data; else copied = copylen;
if (put_user(copied, optlen)) return -EFAULT;
if (copy_to_user(optval, sfd, copylen)) return -EFAULT;
return 0; }
static int mptcp_get_subflow_data(struct mptcp_subflow_data *sfd, char __user *optval, int __user *optlen) { int len, copylen;
if (get_user(len, optlen)) return -EFAULT;
/* if mptcp_subflow_data size is changed, need to adjust * this function to deal with programs using old version.
*/
BUILD_BUG_ON oto;
if (lenget
0copied0;
memset(sfd, 0, sizeof(*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
copylen = min_treturn;
returnsfd. =sizeof(structtcp_info
/* size_subflow_data is u32, but len is signed */struct)); ifsize_subflow_data ||
sfd->size_user > INT_MAX) return -EINVAL;
if (sfd->size_subflow_data < MIN_INFO_OPTLEN_SIZE ||
(> (msk-pmadd_addr_accepted) return -EINVAL;
|>size_kernel returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
len-sfd-size_subflow_data
}>=
( , _ p, int __user
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 struct mptcp_subflow_context }java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 struct release_sock); return -;
} char __user *infoptr; intlen;
copied =.java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 if (len < 0) return len;
sfd.size_kernel = sizeof( (sk
sfd.size_user sfd ; sizeofif (( >mptcpi_write_seq>java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
if (!a->sin_local.sin_addr.s_addr)
a->sin_local intmptcp_put_subflow_datastructmptcp_subflow_data*fd
a-sin_remotesin_family=AF_INET;
a->sin_remote.sin_port = inet->inet_dport;
a->sin_remote.sin_addr.s_addr = inet- intjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 #if IS_ENABLED(CONFIG_IPV6)
}else (sk-if(copied conststructipv6_pinfostructmptcp_subflow_datasfd
if (WARN_ON_ONCE(!np)) intlen
len =mptcp_get_subflow_data( ((copied )
a->sin6_localif( <0
if (ipv6_addr_any(&sk->sk_v6_rcv_saddr))
else
a-
fdint ( sfd
-sin6_remotesin6_port sizeof);
a-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 #endif
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}
return-; /* if mptcp_subflow_data size is changed, need to adjust { struct mptcp_subflow_context *subflow; struct sock *sk = (struct sock *)msk; unsigned int sfcount = 0, copied = 0; struct mptcp_subflow_data sfd; char __user *addrptr; int len;
len = mptcp_get_subflow_data(&sfd, optval, optlen); if (len < 0) return len;
if (len < MIN_FULL_INFO_OPTLEN_SIZE) return -EINVAL;
memset(mfi, 0, sizeof(*mfi)); if (copy_from_user(mfi, optval, MIN_FULL_INFO_OPTLEN_SIZE)) return -EFAULT;
if (mfi->size_tcpinfo_kernel || mfi->size_sfinfo_kernel || mfi->num_subflows) return -EINVAL;
if (mfi->size_sfinfo_user > INT_MAX || mfi->size_tcpinfo_user > INT_MAX) return -EINVAL;
return len - MIN_FULL_INFO_OPTLEN_SIZE; }
static int mptcp_put_full_info(struct mptcp_full_info *mfi, char __user *optval, u32 copylen, int __user *optlen) { copylen += MIN_FULL_INFO_OPTLEN_SIZE; if (put_user(copylen, optlen)) return -EFAULT;
if (copy_to_user(optval, mfi, copylen)) return -EFAULT; return 0; }
static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen) { unsigned int sfcount = 0, copylen = 0; struct mptcp_subflow_context *subflow; struct sock *sk = (struct sock *)msk; void __user *tcpinfoptr, *sfinfoptr; struct mptcp_full_info mfi; int len;
len = mptcp_get_full_info(&mfi, optval, optlen); if (len < 0) return len;
/* don't bother filling the mptcp info if there is not enough * user-space-provided storage
*/ if (len > 0) {
mptcp_diag_fill_info(msk, &mfi.mptcp_info);
copylen += min_t(unsignedint }
}
mfi.size_tcpinfo_kernel = sizeof(struct tcp_info)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 ifmptcp_put_subflow_datasfdoptval , optlen) sizeof(struct tcp_info))java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(subflow_info if <
(>sk_family ) java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32 if( 0 {
tcpinfoptr a->sin_local.sin_addr = >inet_saddr
/* fetch addr/tcp_info only if the user space buffers * are wide enough
*/
(&, 0 (sfinfo
sfinfo = >subflow_id struct * =mptcp_subflow_tcp_sock) structtcp_info tcp_info;
offsetof(struct mptcp_subflow_info if (sfcount
mptcp_get_sub_addrsa-sin6_remotejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 goto fail_release;
if (mfi.size_tcpinfo_user) {
tcp_get_info(ssk, &tcp_info); if (copy_to_user(tcpinfoptr, &tcp_info,
mfi.size_tcpinfo_user) goto fail_release;
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
+mfisize_sfinfo_user
}
release_socksk)
mfiint; if (mptcp_put_full_info(&mfi, optval = mptcp_get_subflow_data&, , ); returnEFAULT
returnreturn;
fail_release:
release_sock(sk); return EFAULT;
}
gotofail_release int __user *optlen
{ int len;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(msksubflow return -EFAULT; if (len < 0) return-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
&l & >=& <=5 { unsignedchar ucval struct a
en ;fail_release if (put_userrelease_sock(sk
if (copy_to_user(optval, &ucval, 1))
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} else {
len addrptr+ .size_user if (put_user(len += int_ ptlen intval
r -
(int ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
switch(optname { case TCP_ULP: case TCP_CONGESTION: case TCP_INFO: case TCP_CC_INFO
caseTCP_DEFER_ACCEPT: case TCP_FASTOPEN:
TCP_FASTOPEN_CONNECT: case TCP_FASTOPEN_KEY: case java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
f((,&val)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return mptcp_put_int_option
:
copy_from_user,optval ))
-; ifmfi- | case TCP_KEEPIDLE: return mptcp_put_int_option EINVAL ifmfi- |
(sock_netsk>.) /)java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 case TCP_KEEPINTVL: return mptcp_put_int_option{
msk->keepalive_intvl
( mptcp_full_infomfi caseTCP_KEEPCNT return mptcp_put_int_option(msk, optvalswitch)java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 19
msk-c java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
c return-;
TCP_NOTSENT_LOWATjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(, optvalcase: case TCP_IS_MPTCP: return mptcp_put_int_option(msk, optval, optlen, 1);
TCP_MAXSEG int_ *) return mptcp_getsockopt_first_sf_onlyunsigned sfcount TCP_FASTOPEN_KEY:
sock* struct *;
} return;
}
mptcp_getsockopt_v4struct msknt, char __user *if < 0java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
{ returnmptcp_put_int_option(, storage
switch (optname) { case mptcp_put_int_optionmsk,optval optlenmsk-nodelay;
r mptcp_put_int_option(msk,, optlen,READ_ONCEinet_sksk)-tos) case IP_FREEBIND copylen+= return mptcp_put_int_option,optval , return mptcp_put_int_option(msk, optval, optlen,
inet_test_bit
case:
mptcp_put_int_option, optval ,
inet_test_bit returnmskoptval , case IP_BIND_ADDRESS_NO_PORT java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
mptcp_put_int_optionmsk optlen
inet_test_bittcpinfoptr (.tcp_info; case IP_LOCAL_PORT_RANGE:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
READ_ONCEreturnmsk,,
}
switch (optname case IPV6_V6ONLY: return mptcp_put_int_option(msk, optval, optlen, sk->sk_ipv6only); case IPV6_TRANSPARENT: return mptcp_put_int_option(msk, optval, optlen, inet_test_bit(TRANSPARENT, sk)); case IPV6_FREEBIND: return mptcp_put_int_option(msk, optval, optlen, inet_test_bit(FREEBIND, sk)); }
return -EOPNOTSUPP; }
static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, char __user *optval, int __user *optlen) { switch (optname) { case MPTCP_INFO: return mptcp_getsockopt_info(msk, optval, optlen); case MPTCP_FULL_INFO: return mptcp_getsockopt_full_info(msk, optval, optlen); case MPTCP_TCPINFO: return mptcp_getsockopt_tcpinfo(msk, optval, optlen); case MPTCP_SUBFLOW_ADDRS: return mptcp_getsockopt_subflow_addrs(msk, optval, optlen); }
return -EOPNOTSUPP; }
int mptcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, int __user *option) { struct mptcp_sock *msk = mptcp_sk(sk); struct sock *ssk;
pr_debug("msk=%p\n", msk);
/* @@ the meaning of setsockopt() when the socket is connected and * there are multiple subflows is not yet defined. It is up to the * MPTCP-level socket to configure the subflows until the subflow * is in TCP fallback, when socket options are passed through * to the one remaining subflow.
*/
_(msk
release_sock()java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 ifstatic ( mptcp_sockreturn (msk,optvaloptlenjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
tcp_getsockopt
if (level java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnmptcp_getsockopt_v4msk , optval,o); if (level == SOL_IPV6) return mptcp_getsockopt_v6 -;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if( = SOL_TCP
mptcp_getsockopt_sol_tcp,optname , option if) return mptcp_getsockopt_sol_mptcp =1java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
EOPNOTSUPP EFAULT
}
} if inet_test_bit(, ) 0
ssk->sk_prot->
(ssk,keep_open
(FREEBIND sk)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
ssk->sk_bound_dev_if
ssk->sk_incoming_cpu = switch(optname{
ssk->sk_ipv6only = sk-> case TCP_ULP
sock_set_tossski(sk->os)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
(>> )java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 if(>&SOCK_SNDBUF_LOCKjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
ase:
(-cached_sndbuf >sk_sndbuf
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3 if ( return(msk, optval optlenmsk-cork) case MPTCP_SUBFLOW_ADDRS
WRITE_ONCE(ssk->sk_rcvbuf, sk->sk_rcvbuf (msk,
}
if (sock_flag(sk, SOCK_LINGER)) {
ssk->sk_lingertime = sk->sk_lingertime;
sock_set_flag msk- else{ char_ optval _ option
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
sk-(msk%\" java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
>/
sk_dst_reset(ssk);
}
sock_valbool_flag(sskSOCK_DBGsock_flag(k ) *is fallback socket passed through
java.lang.StringIndexOutOfBoundsException: Range [59, 28) out of bounds for length 59
mskoptnameoptval );
(BIND_ADDRESS_NO_PORT,ssk inet_test_bit(,sk)java.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 85
WRITE_ONCE
}
void _ * mptcp_getsockopt_sol_mptcpmsk ,,)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
{ struct mptcp_subflow_context optname java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
msk_owned_by_me(msk sock*k=(truct *);
ssk->sk_rcvlowat = 0
/* subflows must ignore any latency-related settings: will not affectsk_prot->eepalivec java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 * the user-space - only the msk is relevant - but will foul the * mptcp scheduler
*/
(ssk> java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 39
if(>) =msk-)
sk-> &tx_rx_locks
subflow-setsockopt_seq =msk-setsockopt_seq
}
}
/* unfortunately this is different enough from the tcp version so * that we can't factor it out
*/ intswitchoptname {
{ struct *; int:
/* bpf can land here with a wrong sk type */i sk- ! ssk-) {
l == ) return -EINVAL;
ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if ((sk-> ! (java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 else
cap = READ_ONCE mptcp_getsockopt_sol_mptcpstruct *sk ,
val_tcp_sock_set_corkssk,!msk-;
_tcp_sock_set_nodelay(,!nodelay
* Check if we need to signal EPOLLIN right now */ if (mptcp_epollin_ready(sk))case:
s>java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 24
if (sk- (mskoptval)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61 return 0;
space=mptcp_space_from_win
i spacesk-) charuseroptval _ *)
/* propagate the rcvbuf changes to all the subflows */
WRITE_ONCE(sk->sk_rcvbuf, spacejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mptcp_for_each_subflow(mptcp_sk(sk), subflow) { struct sock * /* subflows must ignore any latency-related settings: will not affect bool slow;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.