@@ -293,6 +293,7 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
293293{
294294 struct sock * sk = (struct sock * )msk ;
295295 struct socket * ssock ;
296+ struct sock * ssk ;
296297 int ret ;
297298
298299 switch (optname ) {
@@ -307,16 +308,17 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
307308 return PTR_ERR (ssock );
308309 }
309310
310- ret = sock_setsockopt (ssock , SOL_SOCKET , optname , optval , optlen );
311+ ssk = msk -> first ;
312+ ret = sk_setsockopt (ssk , SOL_SOCKET , optname , optval , optlen );
311313 if (ret == 0 ) {
312314 if (optname == SO_REUSEPORT )
313- sk -> sk_reuseport = ssock -> sk -> sk_reuseport ;
315+ sk -> sk_reuseport = ssk -> sk_reuseport ;
314316 else if (optname == SO_REUSEADDR )
315- sk -> sk_reuse = ssock -> sk -> sk_reuse ;
317+ sk -> sk_reuse = ssk -> sk_reuse ;
316318 else if (optname == SO_BINDTODEVICE )
317- sk -> sk_bound_dev_if = ssock -> sk -> sk_bound_dev_if ;
319+ sk -> sk_bound_dev_if = ssk -> sk_bound_dev_if ;
318320 else if (optname == SO_BINDTOIFINDEX )
319- sk -> sk_bound_dev_if = ssock -> sk -> sk_bound_dev_if ;
321+ sk -> sk_bound_dev_if = ssk -> sk_bound_dev_if ;
320322 }
321323 release_sock (sk );
322324 return ret ;
@@ -391,6 +393,7 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
391393 struct sock * sk = (struct sock * )msk ;
392394 int ret = - EOPNOTSUPP ;
393395 struct socket * ssock ;
396+ struct sock * ssk ;
394397
395398 switch (optname ) {
396399 case IPV6_V6ONLY :
@@ -403,7 +406,8 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
403406 return PTR_ERR (ssock );
404407 }
405408
406- ret = tcp_setsockopt (ssock -> sk , SOL_IPV6 , optname , optval , optlen );
409+ ssk = msk -> first ;
410+ ret = tcp_setsockopt (ssk , SOL_IPV6 , optname , optval , optlen );
407411 if (ret != 0 ) {
408412 release_sock (sk );
409413 return ret ;
@@ -413,13 +417,13 @@ static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
413417
414418 switch (optname ) {
415419 case IPV6_V6ONLY :
416- sk -> sk_ipv6only = ssock -> sk -> sk_ipv6only ;
420+ sk -> sk_ipv6only = ssk -> sk_ipv6only ;
417421 break ;
418422 case IPV6_TRANSPARENT :
419- inet_sk (sk )-> transparent = inet_sk (ssock -> sk )-> transparent ;
423+ inet_sk (sk )-> transparent = inet_sk (ssk )-> transparent ;
420424 break ;
421425 case IPV6_FREEBIND :
422- inet_sk (sk )-> freebind = inet_sk (ssock -> sk )-> freebind ;
426+ inet_sk (sk )-> freebind = inet_sk (ssk )-> freebind ;
423427 break ;
424428 }
425429
@@ -700,7 +704,7 @@ static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int o
700704 return PTR_ERR (ssock );
701705 }
702706
703- issk = inet_sk (ssock -> sk );
707+ issk = inet_sk (msk -> first );
704708
705709 switch (optname ) {
706710 case IP_FREEBIND :
@@ -865,8 +869,8 @@ static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int
865869{
866870 struct sock * sk = (struct sock * )msk ;
867871 struct socket * ssock ;
868- int ret ;
869872 struct sock * ssk ;
873+ int ret ;
870874
871875 lock_sock (sk );
872876 ssk = msk -> first ;
@@ -881,7 +885,7 @@ static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int
881885 goto out ;
882886 }
883887
884- ret = tcp_getsockopt (ssock -> sk , level , optname , optval , optlen );
888+ ret = tcp_getsockopt (ssk , level , optname , optval , optlen );
885889
886890out :
887891 release_sock (sk );
0 commit comments