|
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