|
9 | 9 | #include <linux/inet.h> |
10 | 10 | #include <linux/kernel.h> |
11 | 11 | #include <net/tcp.h> |
| 12 | +#include <net/inet_common.h> |
12 | 13 | #include <net/netns/generic.h> |
13 | 14 | #include <net/mptcp.h> |
14 | 15 | #include <net/genetlink.h> |
@@ -1005,8 +1006,8 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk, |
1005 | 1006 | bool is_ipv6 = sk->sk_family == AF_INET6; |
1006 | 1007 | int addrlen = sizeof(struct sockaddr_in); |
1007 | 1008 | struct sockaddr_storage addr; |
| 1009 | + struct sock *newsk, *ssk; |
1008 | 1010 | struct socket *ssock; |
1009 | | - struct sock *newsk; |
1010 | 1011 | int backlog = 1024; |
1011 | 1012 | int err; |
1012 | 1013 |
|
@@ -1042,18 +1043,23 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk, |
1042 | 1043 | if (entry->addr.family == AF_INET6) |
1043 | 1044 | addrlen = sizeof(struct sockaddr_in6); |
1044 | 1045 | #endif |
1045 | | - err = kernel_bind(ssock, (struct sockaddr *)&addr, addrlen); |
| 1046 | + ssk = mptcp_sk(newsk)->first; |
| 1047 | + if (ssk->sk_family == AF_INET) |
| 1048 | + err = inet_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); |
| 1049 | +#if IS_ENABLED(CONFIG_MPTCP_IPV6) |
| 1050 | + else if (ssk->sk_family == AF_INET6) |
| 1051 | + err = inet6_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); |
| 1052 | +#endif |
1046 | 1053 | if (err) |
1047 | 1054 | return err; |
1048 | 1055 |
|
1049 | 1056 | inet_sk_state_store(newsk, TCP_LISTEN); |
1050 | | - err = kernel_listen(ssock, backlog); |
1051 | | - if (err) |
1052 | | - return err; |
1053 | | - |
1054 | | - mptcp_event_pm_listener(ssock->sk, MPTCP_EVENT_LISTENER_CREATED); |
1055 | | - |
1056 | | - return 0; |
| 1057 | + lock_sock(ssk); |
| 1058 | + err = __inet_listen_sk(ssk, backlog); |
| 1059 | + if (!err) |
| 1060 | + mptcp_event_pm_listener(ssk, MPTCP_EVENT_LISTENER_CREATED); |
| 1061 | + release_sock(ssk); |
| 1062 | + return err; |
1057 | 1063 | } |
1058 | 1064 |
|
1059 | 1065 | int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc) |
|
0 commit comments