Skip to content

Commit 3aa3624

Browse files
Paolo Abenidavem330
Paolo Abeni
authored andcommitted
mptcp: avoid ssock usage in mptcp_pm_nl_create_listen_socket()
This is one of the few remaining spots actually manipulating the first subflow socket. We can leverage the recently introduced inet helpers to get rid of ssock there. No functional changes intended. Signed-off-by: Paolo Abeni <[email protected]> Reviewed-by: Mat Martineau <[email protected]> Signed-off-by: Matthieu Baerts <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f0bc514 commit 3aa3624

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

net/mptcp/pm_netlink.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <linux/inet.h>
1010
#include <linux/kernel.h>
1111
#include <net/tcp.h>
12+
#include <net/inet_common.h>
1213
#include <net/netns/generic.h>
1314
#include <net/mptcp.h>
1415
#include <net/genetlink.h>
@@ -1005,8 +1006,8 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
10051006
bool is_ipv6 = sk->sk_family == AF_INET6;
10061007
int addrlen = sizeof(struct sockaddr_in);
10071008
struct sockaddr_storage addr;
1009+
struct sock *newsk, *ssk;
10081010
struct socket *ssock;
1009-
struct sock *newsk;
10101011
int backlog = 1024;
10111012
int err;
10121013

@@ -1042,18 +1043,23 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk,
10421043
if (entry->addr.family == AF_INET6)
10431044
addrlen = sizeof(struct sockaddr_in6);
10441045
#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
10461053
if (err)
10471054
return err;
10481055

10491056
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;
10571063
}
10581064

10591065
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_info *skc)

0 commit comments

Comments
 (0)