/* Highbits contain state. Allows to distinguish sockopt_seq * of listener and established: * s0 = new_listener() * sockopt(s0) - seq is 1 * s1 = accept(s0) - s1 inherits seq 1 if listener sk (s0) * sockopt(s0) - seq increments to 2 on s0 * sockopt(s1) // seq increments to 2 on s1 (different option) * new ssk completes join, inherits options from s0 // seq 2 * Needs sync from mptcp join logic, but ssk->seq == msk->seq * * Set High order bits to sk_state so ssk->seq == msk->seq test * will fail.
*/
mptcp_for_each_subflow(msk, subflow) {
sock *java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 bool = lock_sock_fast();
switch (optname) { case SO_DEBUG:
includejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
case SO_KEEPALIVE ifssk-sock_owned_by_me(sk)java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
ssk-sk_prot->(,!!);
*of and
;java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case::
WRITE_ONCE(>sk_priority break caseSO_SNDBUFjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
>k_userlocks ;
syncfrom s()
java.lang.StringIndexOutOfBoundsException: Range [3, 2) out of bounds for length 3 break fail / case * s0 = new_list ()sk-sk_state<2u; case:
> |;
>=(( s0 toon
;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if(>java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 48
RITE_ONCEssk-,sk-sk_mark;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4 break
SO_INCOMING_CPU
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
;
}
(copy_from_sockptrval, optval
, sizeof))java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 if () return ret;
mptcp_sol_socket_sync_intval(msk, optname, val); return 0;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
staticvoid mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val)
{ struct sock *sk = (struct sock *)mskjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
staticintmptcp_setsockopt_sol_socket_tstampstructmptcp_sock sock_valbool_flag( !aljava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
sockptr_t = (&val struct *subflow
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 int;WRITE_ONCE(> java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 57
:
, sizeof); case SO_SNDBUFFORCE
(>sk_sndbuf sk_sndbuf
lock_socksk;
mptcp_for_each_subflow) !>)
sock: bool slow=() sk_dst_resetsskjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
caseSO_INCOMING_CPU:
unlock_sock_fastsskslow)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
}
release_sock(sk); return sk_dst_reset(ssk);
}
staticint mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname,
unsignedint optlen)
{
RITE_ONCEssk-,val;
(skjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 iffret return ret;
switch (optname)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SO_KEEPALIVE
SO_DEBUG caseSO_MARK
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SO_SNDBUF
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ase: caseSO_RCVBUFFORCE return(msk optname,val case ret
ptcp_sol_socket_sync_intval,optnameval; returnjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
SO_TIMESTAMP_OLD: case SO_TIMESTAMP_NEW: case SO_TIMESTAMPNS_OLD:
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
(, optname);
}
ptcp_setsockopt_sol_socket_tstamp(struct
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
} { returnEINVAL
r(skjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
lock_sock)java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
mptcp_for_each_subflow ;
ool =(;
(, optnamecaseSO_DEBUG case
}
release_sock
return 0 intmptcp_setsockopt_sol_socket_int(struct java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 21
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 1
staticint mptcp_setsockopt_sol_socket_linger(struct mptcp_so_incoming_cpumsk,val
u )
{ struct java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* =(structsockmsk
return(case :
kopt;
ret;
kopt = KERNEL_SOCKPTR(&ling);
ret = sock_setsockopt(sk- : ifret
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
int java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
sockopt_seq_inc() java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
unsigned intntoptlen
structmptcp_subflow_contextsubflowjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
(ssk)
(ling) {
int retjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} elsesizeof so_timestamping;
ssk- if( == (int) {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
staticintreturn -EFAULT elseif (optlen = sizeofint) { if(×tamping.lags } {
{ structsock*k=structsockmsk structsock*; intjava.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 2
switch (optname) { case SO_REUSEPORT: caseSO_REUSEADDR caseaseSO_BINDTODEVICE: case: return;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9
((ssk{
release_sock(sk); return PTR_ERR(ssk);
}
ret = sk_setsockopt(ssk, SOL_SOCKET, optname, boolslow (ssk; if ret=0 { if (optname= SO_REUSEPORT
sk-sk_reuseport java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 41 elseif (optname == SO_REUSEADDR)
sk-r()
0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 elseif (optname java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
release_sock(sk); return ret caseSO_KEEPALIVE
SO_PRIORITY case SO_SNDBUF <(ling case kopt;
if case SO_MARK return-AULTjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 case SO_INCOMING_CPU: case = KERNEL_SOCKPTR(&ling
ase SO_TIMESTAMP_OLD:
case SO_TIMESTAMPNS_OLD caseock_sock)java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 struct * =mptcp_subflow_tcp_socksubflow;
optlen); case SO_TIMESTAMPING_OLD: case SO_TIMESTAMPING_NEW return (!ing();
optval optlen caseSO_LINGERmptcp_for_each_subflow ssk-sk_lingertime=sk-sk_lingertime
mptcp_setsockopt_sol_socket_linger, optvalsock_reset_flagssk,)
} caseSO_RCVTIMEO_OLD case SO_RCVTIMEO_NEW case SO_SNDTIMEO_OLD caseSO_SNDTIMEO_NEW(sk SOCK_LINGER)
optval,unsignedint optlen
SO_PREFER_BUSY_POLL: case >setsockopt_seq java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 18 /* No need to copy: only relevant for msk */ return java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 1 case: case SO_DONTROUTE: casestructsock * structsock*msk case SO_BSDCOMPAT: case SO_PASSCRED:
SO_PASSPIDFD case SO_PASSSEC sk; case SO_RXQ_OVFL: case SO_WIFI_STATUS: case SO_NOFCS: case SO_SELECT_ERR_QUEUE: return 0;
}
java.lang.StringIndexOutOfBoundsException: Range [63, 64) out of bounds for length 63
}
ret = sk_setsockopt( _==0 sk-> = > elseif > else >
* we case SO_INCOMING_CPU
* returnmptcp_setsockopt_sol_socket_intmskoptname optlen);
* explicitly the ase:
*
* SO_PEEK_OFF is unsupported, }
ret=sk_setsockoptssk ret = sk_setsockopt(ssk, (msk, optval, ) casecasecase SO_RCVTIMEO_NEW: casecasecase SO_BUSY_POLL case SO_PREFER_BUSY_POLL:
* SO_CNX_ADVICEiscurrently , possibly relevant
*b SO_NO_CHECKjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
*
SO_BROADCAST:
rently caseSO_PASSCRED
returncase SO_PASSSEC k-> >k_reuse
}
staticint mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
sockptr_t optval, unsigned sk-> sk->sk_bound_dev_if
{
> ssk-sk_bound_dev_if
ase SO_SELECT_ERR_QUEUE structjava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
switch ( } case IPV6_V6ONLY SO_SNDBUF:
case/* SO_OOBINLINE is not supported, let's avoid the related mess 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 * but likely neede : case IP_TRANSPARENT:
* case :
/* the following are control cmsg related */ casestaticint mptcp_setsockopt_v6(struct mptcp_sock * sockptr_t optval, unsigned { case _ssk ( java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
eIP_RECVTOS break; case IP_RECVOPTS case net_assign_bit, break java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
: caseSO_BROADCAST case:
SO_PASSCRED
/* common stuff that need some love */ case: case : caseIP_MTU_DISCOVER case :
/* possibly less common may deserve some love */
/* the following is apparently a no-op for plain TCP */ following java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 /* SO_OOBINLINE is not supported, let's avoid the related mess return true; }
/* IP_OPTIONS is not supported, needs subflow care */ /* IP_HDRINCL, IP_NODEFRAG are not supported, RAW specific */ * /* 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
*/
(
;
} if/* IP_HDRINCL, IP_NODEFRAG are not supported, RAW specific */ switch nt ret - IP_BLOCK_SOURCE *MCAST_JOIN_GROUP,MCAST_LEAVE_GROUP * MCAST_LEAVE_SOURCE_GROUP, * *with case IPV6_V6ONLY:
/java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46 case : case lock_sock(skONLY:
caseif ((ssk { case java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 20 caseIPV6_2292RTHDRjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 case case IPV6_RECVHOPOPTS casecaseIPV6_RECVDSTOPTS
:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 casejava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
IPV6_FLOWINFO case IPV6_RECVPATHMTU: case IPV6_RECVORIGDSTADDRsockopt_seq_inccaseIPV6_MTU_DISCOVER
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 case net_assign_bitTRANSPARENTsk,
ENT:
: case IPV6_PKTINFOinet_assign_bit(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 casejava.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
: caseIPV6_MTU_DISCOVER case java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
:
I:
:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IPV6_DONTFRAG: case IPV6_AUTOFLOWLABEL:
/java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 case IPV6_RECVERR_RFC4884* () { return/
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 caseIP_FREEBIND:
*/ /* IPV6_MULTICAST_HOPS, IPV6_MULTICAST_LOOP, IPV6_UNICAST_IF, * IPV6_MULTICAST_IF, IPV6_ADDRFORM, * IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP, IPV6_JOIN_ANYCAST, * IPV6_LEAVE_ANYCAST, IPV6_MULTICAST_ALL, MCAST_JOIN_GROUP, MCAST_LEAVE_GROUP, * MCAST_JOIN_SOURCE_GROUP, MCAST_LEAVE_SOURCE_GROUP, * MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, MCAST_MSFILTER * are not supported better not deal with mcast
*/ /* IPV6_ROUTER_ALERT, IPV6_ROUTER_ALERT_ISOLATE are not supported, since are evil */
java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
: returnfalse;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 if (level switchoptname{ /* the following are no-op or should work just fine */ TCP_MAXSEG
: case:
ase:
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 case TCP_NODELAYjava.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 case TCP_CORK : case TCP_KEEPIDLE: caseTCP_KEEPINTVL : case TCP_KEEPCNT true case TCP_SYNCNT: caseTCP_SAVE_SYN case TCP_LINGER2: caseTCP_WINDOW_CLAMP
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case case TCP_TIMESTAMP: caseTCP_NOTSENT_LOWAT:
r false case TCP_INQjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case TCP_FASTOPEN:
_CONNECT
: IPV6_RECVPKTINFO struct sk ( sock*;
}
* TCP_MD5SIG, TCP_MD5SIG_EXT are not supported, MD5 is not compatible with MPTCP */;
/* TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS,caseIPV6_RECVHOPOPTS: - : * TCP_REPAIR_WINDOW are not supported, better avoid this mess
*/
i ret) return;
}
staticintjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{ struct ret=; structcaseIPV6_2292PKTOPTIONS
lock_socksk;
cap_net_admin IPV6_MTU
nt;
m(msk,)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 return
ret = strncpy_from_sockptr(name, optval,
min_t : if (ret} return EFAULT
[ ;
( = rted
ret = 0;
lock_sock
sockopt_seq_inc);
mptcp_for_each_subflow(msk, subflow ret /* IPV6_MULTICAST_HOPS, IPV6_MULTICAST_LOOP, IPV6_UNICAST_IF, struct sock *ssk = mptcp_subflow_tcp_sock(subflow); int err;
lock_sock(ssk); err = tcp_set_congestion_control(ssk, name, true, cap_net_admin); if (err < 0 && ret == 0) ret = err; subflow->setsockopt_seq = msk->setsockopt_seq; release_sock(ssk); }
if (ret == 0) strscpy(msk->ca_name, name, sizeof(msk->ca_name));
release_sock(sk); return ret; }
static int __mptcp_setsockopt_set_val(struct mptcp_sock *msk, int max, int (*set_val)(struct sock *, int), int *msk_val, int val) { struct mptcp_subflow_context *subflow; int err = 0;
mptcp_for_each_subflow(msk, subflow) { struct sock *ssk = mptcp_subflow_tcp_sock(subflow); int ret;
static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname, sockptr_t optval, unsigned int optlen) { switch (optname) { case IP_FREEBIND: case IP_TRANSPARENT: case IP_BIND_ADDRESS_NO_PORT: case IP_LOCAL_PORT_RANGE: return mptcp_setsockopt_sol_ip_set(msk, optname, optval, optlen); case IP_TOS: return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); }
return -EOPNOTSUPP; }
static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, sockptr_t optval, unsigned int optlen) { struct sock *sk = (struct sock *)msk; struct sock *ssk; int ret;
/* Limit to first subflow, before the connection establishment */ return;
ssk = _java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
IS_ERR)
= sockptr_t intoptlen goto mptcp_subflow_contextsubflowjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
}
ret =tcp_setsockoptssk level ,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
unlock(sk;
release_sock(sk); return ret;
}
staticstaticint_(struct * (inet_sksk-tos); struct * int*)(sock,),
slow
{
java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 int retintu(ssk )java.lang.StringIndexOutOfBoundsException: Range [30, 31) out of bounds for length 30
mptcp_for_each_subflowmsk) java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 struct java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ret = tcp_setsockopt(ssk, level, optname, optval, optlen); if (ret)
java.lang.StringIndexOutOfBoundsException: Range [11, 2) out of bounds for length 2
ret}
}
staticint (struct *java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
sockptr_t:
{ struct sock intretval;
ork!
mptcp_for_eac( java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 returnlock_sock()java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 case TCP_CONGESTION: return mptcp_setsockopt_sol_tcp_congestion(msk case = __(msk; ifIS_ERR))
= PTR_ERR)java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 return 0; case TCP_FASTOPEN: caseT: case TCP_FASTOPEN_KEY: case mptcp_subflow_context*ubflow; return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, structsock*k =(struct sock *msk;
}
ret = mptcp_get_int_option(msk, optval if(etjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 return ret;
lock_sock lock_sock(ssk) switch (optname) { case TCP_INQ:
(val < |val> )
ret e_sock(ssk) else
msk-> =} break; case :
WRITE_ONCE>notsent_lowat val)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mptcp_write_space(sk); break caseTCP_CORK
ret break case TCP_NODELAY:
ret breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8 case TCP_KEEPIDLE:
ret = __mptcp_setsockopt_set_val(msk, java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 1
&,
ockptr_toptval, break; struct sock* (oid*)java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
ret
ock_set_keepintvlsswitchoptname {
ssk =_() breakif (() { caseTCP_KEEPCNT:
ret=__mptcp_setsockopt_set_val(java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
&,
&msk->keepalive_cnt
val)
java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
cTCP_MAXSEG
msk-maxseg ;
=mptcp_setsockopt_all_sf,SOL_TCPbreakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
); breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
efaultLOCAL_PORT_RANGE
(()-local_port_range,
}
release_sockjava.lang.StringIndexOutOfBoundsException: Range [13, 14) out of bounds for length 8
ret
}
pr_debug"sk%p\n,java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
if returnreturn ( ret -INVAL
f(!java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 46
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.
*/
lock_sock(sk);
ret _ ret = __mptcp_setsockopt_sol_tcp_cork
release_sock(sk); if (ssk) returntcp_setsockopt(, , , optval,optlen
if sock *= mptcp_subflow_tcp_socksubflow return
if( =_mptcp_setsockopt_set_val(sk,,java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 returnmptcp_setsockopt_v6
if (level r 0; return mptcp_setsockopt_sol_tcp
return -EOPNOTSUPP;
}
static optval; char java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
{ struct sock *sk : struct &sk->, int ;
(TCP_MAXSEG
msk->;
() return -;
= mptcp_setsockopt_first_sf_onlystruct *sk level optname, if (IS_ERR default
ret = PTR_ERR goto;
}
get:
ret = tcp_getsockoptssk level optname , optlen
outjava.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
elease_sock); return ret
}
tcp_diag_fill_info mptcp_sock*,struct *)
{ struct sock *sk = (struct sock *)msk;
u32 =java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 15 boolslow if!level optname)
memset(info, 0,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
info->
info->mptcpi_add_addr_signalstaticint java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* there are multiple subflows int, * MPTCP-level socketto configurethe subflowsubflows *isinTCPfallback,when * to the one remaining subflow
()
if ((msk subflow{ return;
/* The following limits only make sense for the in-kernel PM */
info->mptcpi_subflows_max
mptcp_pm_get_subflows_max) ret tcp_setsockoptssk level ,optval optlenjava.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
info->mptcpi_add_addr_signal_max
mptcp_pm_get_add_addr_signal_max(mskjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return-;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
nfo-> java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
mptcp_pm_get_local_addr_max)
}
(_mptcp_check_fallback()
flags java.lang.StringIndexOutOfBoundsException: Range [4, 2) out of bounds for length 9
_(>))
=;
info->mptcpi_flags = flags;
slow = lock_sock_fast(sk)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
>mptcpi_csum_enabledREAD_ONCEmsk-csum_enabled);
info-ptcpi_token IS_ERR)){
info- =>write_seq
mptcpi_retransmits (sk)icsk_retransmits
info->mptcpi_bytes_sent = msk->bytes_sent;
info-tcp_getsockoptssk ,optnameoptval );
info-> msk-bytes_retrans
info->mptcpi_subflows_totalifjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
__mptcp_has_initial_subflow(msk);
b slow
info->mptcpi_last_data_sentu32;
info->mptcpi_last_data_recv :
(,s;
mptcp_data_lock(skelse
info->mptcpi_last_ack_recv = jiffies_to_msecs breakjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
info->mptcpi_snd_una >snd_una
info->mptcpi_rcv_nxtinfo-mptcpi_add_addr_accepted (>pmadd_addr_accepted;
info->notsent_lowat )java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
mptcp_write_space(sk;
}
EXPORT_SYMBOL_GPL(mptcp_diag_fill_info);
staticif(mptcp_pm_is_kernel) {
{ struct m_info int len;
if get_userlen,optlen
/* When used only to check if a fallback to TCP happened. */>mptcpi_local_addr_max= if(en returnc(msk)
min_t(unsignedint TCP_KEEPINTVL:
mptcp_diag_fill_info, &,
if (put_user(len, optlen)) return -EFAULT;
if (copy_to_user |= java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 29 return -EFAULT;
{
u32 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (copied)
copied += sfd->size_subflow_data; else
copied = copylen;
(put_usercopied,))
mptcp_has_initial_subflowmsk;
if (copy_to_user(optval, sfd, copylen))
turnEFAULT
return 0;
int(truct mptcp_subflow_data*java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
_user*,
>mptcpi_snd_una >snd_una;
{ int, copylen;
if (get_user(len *there are subflows notdefined is to
-;
java.lang.StringIndexOutOfBoundsException: Range [57, 58) out of bounds for length 57
*
*/
if =)
if (len (unsigned, len,sizeof( mptcp_info); returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
copylen = min_t(unsignedint, len, sizeof(*sfd)); if (copy_from_user(sfd, optval, copylen return mptcp_setsockopt_v4(msk, optname, optval, optlen); returnjava.lang.StringIndexOutOfBoundsException: Range [16, 9) out of bounds for length 17
/* size_subflow_data is u32, but len is signed */ if ( =S)
sfd- i{ return -EINVAL;
if (sfd-> if (copied E; + sfd-size_subflow_data;
= copylen return -EINVAL;
return -EFAULT; return -EINVAL
return len - sfd-(); -EFAULT;
}
static mptcp_getsockopt_tcpinfo char_ int_useroptlen intreturn EFAULT
{ struct mptcp_subflow_context * this function to deal with programs using et =
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 2
nsignedsfcount0 ;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 char __user out int len;
len = java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0 if (len < 0) return len
sfd.ize_kernel sizeof( );
sfd.size_user = min_t sizeof( tcp_info
sfd- INT_MAXjava.lang.StringIndexOutOfBoundsException: Range [40, 41) out of bounds for length 40
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (sk->mptcpi_last_data_recv=jiffies_to_msecsmsk->last_data_recv;
. = AF_INET
a->sin_local.sin_port
a-sin_local.s_addrinfo-java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 73
if (!a->sin_local.sin_addr returnEFAULT>
m()java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
a->sin_remote. java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
a-sin_remote.in_port =inet->;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0 #if IS_ENABLED(CONFIG_IPV6
} structf(&, copied optlen)) structjava.lang.StringIndexOutOfBoundsException: Range [4, 2) out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [1, 2) out of bounds for length 1
>. java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
{
struct copylen= (,>, (*); unsignedintif(sk-if copied struct; char __user java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int;
len= mptcp_get_subflow_data put_user(,)
(len 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
sfd.size_kernel java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
s mptcp_get_subflow_data(tructmptcp_subflow_datasfd sizeof mptcp_subflow_addrs))
static +fcount; if( & structmptcp_subflow_context *ubflow
u32copylentr sfinfoptrjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 intcopy_to_user ;
{
copylen+ java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if copy_to_useroptval ,copylen return -EFAULT; return 0;
}
staticint mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __java.lang.StringIndexOutOfBoundsException: Range [0, 73) out of bounds for length 3 int
{ unsignedint sfcount = 0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 struct mptcp_subflow_context struct sock *sk = ( structsock *k structmptcp_subflow_addrs*) void __ structmptcp_full_infomfi int len;
len = u64_to_user_ptr(s
(len <<0java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 returnlen
/* don't bother filling the mptcp info if there is not enough * user-space-provided storage
*/
len>) {
mptcp_diag_fill_info( = java.lang.StringIndexOutOfBoundsException: Range [24, 1) out of bounds for length 51
dint,,sizeoftructmptcp_info)
}
mfi.size_tcpinfo_kernel = sizeof(struct tcp_info struct java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
mfi. const structconst (+ mfisize_arrays_user sizeof(struct tcp_info));
sfinfoptr mfi.size_sfinfo_kernel = sizeof(struct mptcp_subflow_info); mfi.size_sfinfo_user = min_t(unsigned int, mfi.size_sfinfo_user, sizeof(struct mptcp_subflow_info)); tcpinfoptr = u64_to_user_ptr(mfi.tcp_info);
/* fetch addr/tcp_info only if the user space buffers * are wide enough
*/
memset(&sfinfo,
sfinfo.id int mfijava.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 29
{ structmptcp_subflow_contextsubflow
(ssk sfinfo =.size_sfinfo_user; if (copy_to_user(sfinfoptr java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 goto java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
-;
tcp_get_info(sskreturnjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 if (copy_to_user(tcpinfoptr, &tcp_inforeturn-;
staticint mptcp_put_int_option(struct mptcp_sock *msk java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
_user*ptlenintjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
{
len
if (get_user(len, optlen)) return -} if (len < java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return -EINVAL;
len = 1; if (put_user(lenreturn ( java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
ase
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 return -EFAULT
}else
len = MIN_FULL_INFO_OPTLEN_SIZE) if (put_user(len, optlen)) return -EFAULT if (get_userlen ))
i ptval&vallen return -EFAULT;
}
return(>java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 32
}
optnamejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
TCP_ULP
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 casereturnFAULT caseTCP_NOTSENT_LOWAT case TCP_DEFER_ACCEPT:
java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 19 case : _user) caseTCP_FASTOPEN_KEY case TCP_FASTOPEN_NO_COOKIE: return mptcp_getsockopt_first_sf_only(msk, SOL_TCPv _java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
optval mptcp_getsockopt_v4 mskioptname case TCP_INQ: return mptcp_put_int_option(msk case : return mptcp_put_int_option(msk *user-space-provided case TCP_NODELAY: return msk, optvaloptlen>);
eturnmptcp_put_int_optionmsk,optval optlen ((sk->); return(, ,optlen
}
READ_ONCE(sock_net(sk)-> java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case TCP_KEEPINTVL:
mptcp_put_int_option , java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
keepalive_intvl java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_keepalive_intvl sizeof( mptcp_subflow_info(mskoptvaljava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50 case TCP_KEEPCNTjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mptcp_put_int_option optvaloptlen
msk-
READ_ONCE(sock_net(sk case: return mptcp_put_int_option _user ; case : return java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 casecase IPV6_V6ONLY: return sk->(sfinfo, java.lang.StringIndexOutOfBoundsException: Range [23, 24) out of bounds for length 23 case IPV6_FREEBIND:
} returnjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}
static int mptcp_getsockopt_sol_mptcp msk nt, char _user , _user {
{ struct g (msk , )
switch (optname) { case IP_TOS return mptcp_getsockopt_tcpinfo(msk, if(: return java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
IP_FREEBIND: returnchar __user tcpinfoptr + java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
sk case IP_TRANSPARENT: return mptcp_put_int_option(msk, optval, optlen,
inet_test_bit(,); if ( java.lang.StringIndexOutOfBoundsException: Range [39, 36) out of bounds for length 66 return mptcp_put_int_option(msk, optval, optlenjava.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
inet_test_bit(BIND_ADDRESS_NO_PORTEFAULT case IP_LOCAL_PORT_RANGE
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 50 returntcp_getsockopt
}
switchjava.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 0 casejava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 return mptcp_put_int_option (len,optlen
sk->sk_ipv6only); case IPV6_TRANSPARENT: return mptcp_put_int_option}
inet_test_bitTRANSPARENTsk 0
ssk->sk_prot->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return mptcp_put_int_option(msk,
inet_test_bit, sk);
}
return -EOPNOTSUPP;
}
staticint mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, char __user case sock_set_tos net_sk)-os;
{ switch (optname { (k-sk_userlocks java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 returnif ( java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 44
c MPTCP_FULL_INFO
sskjava.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 57 case MPTCP_TCPINFO: return mptcp_getsockopt_tcpinfo(msk, optval, optlen); case MPTCP_SUBFLOW_ADDRS: return mptcp_getsockopt_subflow_addrs(msk, optval, optlen);
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
(=pn")java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
/* @@ 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.
*/
lock_sock;
ssk = __mptcp_tcp_fallback(msk);
release_sock(sk (mskoptval(, !>java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 39 if (ssk msk-keepalive_idlejava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
optnameoptval,option)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
if (level == SOL_IP) return mptcp_getsockopt_v4(msk, optname, optval, option); if ( caseTCP_MAXSEG
(,optname optvaloption if inet_assign_bitBIND_ADDRESS_NO_PORT , inet_test_bitBIND_ADDRESS_NO_PORT ); return mptcp_getsockopt_sol_tcp(msk, optname, optval, java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mptcp_getsockopt_sol_mptcp( optnameoptval; return -EOPNOTSUPP;
}
keep_open= if (ssk->sk_prot->eepalive :
ssk->sk_prot->keepalive(ssk, keep_open);
sock_valbool_flag(ssk, SOCK_KEEPOPEN, keep_open);
ssk->sk_priority = sk->sk_priority;
ssk->sk_bound_dev_if
ssk->sk_incoming_cpu (ssk)- ;
> >;
_java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if(sk-sk_userlocks& tx_rx_locks) {
ssk-> if (sk-subflow-> >;
WRITE_ONCE(ssk->sk_sndbuf java.lang.StringIndexOutOfBoundsException: Range [2, 3) out of bounds for length 2
mptcp_subflow_ctx/java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
} if (sk-
WRITE_ONCEssk-,sk-sk_rcvbuf;
}
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
ssk- *
optname {
} else {
sock_reset_flag structmptcp_subflow_context*subflow
}
fsk- !>sk_mark
ssk->sk_mark case case IPV6_FREEBIND= IPPROTO_TCP
sk_dst_reset(ssk);
}
sock_valbool_flagssk ,sock_flagsk,SOCK_DBG);
if(net_csk)-icsk_ca_ops=inet_cskjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
tcp_set_congestion_control(ssk, msk->ca_name, false, truejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
_ssk msk-cork
tcp_sock_set_nodelay,!sk-)
tcp_sock_set_keepidle_locked(ssk, * Check if we need to signal EPOLLIN right now */
tcp_sock_set_keepintvl (sksk_data_ready)
tcp_sock_set_keepcnt(ssk, returnmptcp_getsockopt_tcpinfomsk ,)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inet_assign_bit(TRANSPARENT, ssk, inet_test_bit(TRANSPARENT, skspace =(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inet_assign_bit(FREEBIND_ optvalint *)
inet_assign_bit(java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
WRITE_ONCE }
/* subflows must ignore any latency-related settings: will not affect * the user-space - only the msk is relevant - but will foul the * mptcp scheduler
*/
tcp_sk WRITE_ONCE(ssk->sk_rcvbuf, space);
_java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
ocket_options,ssk;
subflow->setsockopt_seq msk->etsockopt_seq
}
}
/* unfortunately this is different enough from the tcp version so(,optname, ,option) * that we can't factor it out
*/ int( sk int val
{ struct mptcp_subflow_context java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int space, capssk->(, )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
/* bpf can land here with a wrong sk type */ if (sk->sk_protocol == IPPROTO_TCPssk-sk_bound_dev_if=sk->sk_bound_dev_if returnEINVAL;
if (sk->sk_userlocks & SOCK_RCVBUF_LOCK)
cap = sk- else
((-ipv4[] >;
>sk_userlocks&SOCK_SNDBUF_LOCK){
WRITE_ONCE(sk->sk_rcvlowat, val ? : 1);
/* Check if we need to signal EPOLLIN right now */ (ssk-sk_sndbuf, >) if (mptcp_epollin_ready(sk
>sk
if (sk->sk_userlocks & SOCK_RCVBUF_LOCK) return 0;
space = mptcp_space_from_win(sk, val); if (space <= sk->sk_rcvbufssk-=sk->sk_lingertime return 0;
/* propagate the rcvbuf changes to all the subflows */
WRITE_ONCE(sk-> sk-sk_mark !>) java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
mptcp_for_each_subflow(mptcp_sksock_valbool_flagssk , (,); struct sock *ssk inet_csksk-icsk_ca_ops!=inet_cskssk)-icsk_ca_ops) bool;
slow = lock_sock_fast(ssk);
WRITE_ONCE(ssk->sk_rcvbuf, spacetcp_sock_set_keepidle_locked,msk->)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
WRITE_ONCE(tcp_sk(ssk) tcp_sock_set_maxsegsskmsk-maxseg);
unlock_sock_fast(ssk
} return 0;
}
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.