Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mptcp: revert "mptcp: provide subflow aware release function"

This change reverts commit ad98dd37051e ("mptcp: provide subflow aware
release function"). The latter introduced a deadlock spotted by
syzkaller and is not needed anymore after the previous commit.

Fixes: ad98dd37051e ("mptcp: provide subflow aware release function")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Paolo Abeni and committed by
David S. Miller
0a3cc579 86581852

+2 -53
+2 -53
net/mptcp/protocol.c
··· 11 11 #include <linux/netdevice.h> 12 12 #include <linux/sched/signal.h> 13 13 #include <linux/atomic.h> 14 - #include <linux/igmp.h> 15 14 #include <net/sock.h> 16 15 #include <net/inet_common.h> 17 16 #include <net/inet_hashtables.h> ··· 19 20 #include <net/tcp_states.h> 20 21 #if IS_ENABLED(CONFIG_MPTCP_IPV6) 21 22 #include <net/transp_v6.h> 22 - #include <net/addrconf.h> 23 23 #endif 24 24 #include <net/mptcp.h> 25 25 #include <net/xfrm.h> ··· 3462 3464 return mask; 3463 3465 } 3464 3466 3465 - static int mptcp_release(struct socket *sock) 3466 - { 3467 - struct mptcp_subflow_context *subflow; 3468 - struct sock *sk = sock->sk; 3469 - struct mptcp_sock *msk; 3470 - 3471 - if (!sk) 3472 - return 0; 3473 - 3474 - lock_sock(sk); 3475 - 3476 - msk = mptcp_sk(sk); 3477 - 3478 - mptcp_for_each_subflow(msk, subflow) { 3479 - struct sock *ssk = mptcp_subflow_tcp_sock(subflow); 3480 - 3481 - ip_mc_drop_socket(ssk); 3482 - } 3483 - 3484 - release_sock(sk); 3485 - 3486 - return inet_release(sock); 3487 - } 3488 - 3489 3467 static const struct proto_ops mptcp_stream_ops = { 3490 3468 .family = PF_INET, 3491 3469 .owner = THIS_MODULE, 3492 - .release = mptcp_release, 3470 + .release = inet_release, 3493 3471 .bind = mptcp_bind, 3494 3472 .connect = mptcp_stream_connect, 3495 3473 .socketpair = sock_no_socketpair, ··· 3557 3583 } 3558 3584 3559 3585 #if IS_ENABLED(CONFIG_MPTCP_IPV6) 3560 - static int mptcp6_release(struct socket *sock) 3561 - { 3562 - struct mptcp_subflow_context *subflow; 3563 - struct mptcp_sock *msk; 3564 - struct sock *sk = sock->sk; 3565 - 3566 - if (!sk) 3567 - return 0; 3568 - 3569 - lock_sock(sk); 3570 - 3571 - msk = mptcp_sk(sk); 3572 - 3573 - mptcp_for_each_subflow(msk, subflow) { 3574 - struct sock *ssk = mptcp_subflow_tcp_sock(subflow); 3575 - 3576 - ip_mc_drop_socket(ssk); 3577 - ipv6_sock_mc_close(ssk); 3578 - ipv6_sock_ac_close(ssk); 3579 - } 3580 - 3581 - release_sock(sk); 3582 - return inet6_release(sock); 3583 - } 3584 - 3585 3586 static const struct proto_ops mptcp_v6_stream_ops = { 3586 3587 .family = PF_INET6, 3587 3588 .owner = THIS_MODULE, 3588 - .release = mptcp6_release, 3589 + .release = inet6_release, 3589 3590 .bind = mptcp_bind, 3590 3591 .connect = mptcp_stream_connect, 3591 3592 .socketpair = sock_no_socketpair,