Paolo Abeni
f0b4a4086c
mptcp: stricter state check in mptcp_worker
...
commit d6a0443733434408f2cbd4c53fea6910599bab9e upstream.
As reported by Christoph, the mptcp protocol can run the
worker when the relevant msk socket is in an unexpected state:
connect()
// incoming reset + fastclose
// the mptcp worker is scheduled
mptcp_disconnect()
// msk is now CLOSED
listen()
mptcp_worker()
Leading to the following splat:
divide error: 0000 [#1 ] PREEMPT SMP
CPU: 1 PID: 21 Comm: kworker/1:0 Not tainted 6.3.0-rc1-gde5e8fd0123c #11
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-2.el7 04/01/2014
Workqueue: events mptcp_worker
RIP: 0010:__tcp_select_window+0x22c/0x4b0 net/ipv4/tcp_output.c:3018
RSP: 0018:ffffc900000b3c98 EFLAGS: 00010293
RAX: 000000000000ffd7 RBX: 000000000000ffd7 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffffffff8214ce97 RDI: 0000000000000004
RBP: 000000000000ffd7 R08: 0000000000000004 R09: 0000000000010000
R10: 000000000000ffd7 R11: ffff888005afa148 R12: 000000000000ffd7
R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
FS: 0000000000000000(0000) GS:ffff88803ed00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000405270 CR3: 000000003011e006 CR4: 0000000000370ee0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
tcp_select_window net/ipv4/tcp_output.c:262 [inline]
__tcp_transmit_skb+0x356/0x1280 net/ipv4/tcp_output.c:1345
tcp_transmit_skb net/ipv4/tcp_output.c:1417 [inline]
tcp_send_active_reset+0x13e/0x320 net/ipv4/tcp_output.c:3459
mptcp_check_fastclose net/mptcp/protocol.c:2530 [inline]
mptcp_worker+0x6c7/0x800 net/mptcp/protocol.c:2705
process_one_work+0x3bd/0x950 kernel/workqueue.c:2390
worker_thread+0x5b/0x610 kernel/workqueue.c:2537
kthread+0x138/0x170 kernel/kthread.c:376
ret_from_fork+0x2c/0x50 arch/x86/entry/entry_64.S:308
</TASK>
This change addresses the issue explicitly checking for bad states
before running the mptcp worker.
Fixes: e16163b6e2b7 ("mptcp: refactor shutdown and close")
Cc: stable@vger.kernel.org
Reported-by: Christoph Paasch <cpaasch@apple.com>
Link: https://github.com/multipath-tcp/mptcp_net-next/issues/374
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Tested-by: Christoph Paasch <cpaasch@apple.com>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-04-20 12:13:56 +02:00
..
2023-04-20 12:13:53 +02:00
2022-12-31 13:14:42 +01:00
2022-08-31 17:16:37 +02:00
2022-10-29 10:12:55 +02:00
2022-06-22 14:22:01 +02:00
2022-07-29 17:25:07 +02:00
2023-04-20 12:13:52 +02:00
2022-12-31 13:14:11 +01:00
2023-03-11 13:57:28 +01:00
2023-03-17 08:48:54 +01:00
2023-04-13 16:48:25 +02:00
2022-05-25 09:57:28 +02:00
2023-04-20 12:13:54 +02:00
2022-03-08 19:12:52 +01:00
2023-02-22 12:57:08 +01:00
2022-08-03 12:03:51 +02:00
2023-03-30 12:47:48 +02:00
2021-08-03 13:05:26 +01:00
2023-04-13 16:48:20 +02:00
2023-04-05 11:25:02 +02:00
2022-11-03 23:59:14 +09:00
2023-04-20 12:13:53 +02:00
2023-04-20 12:13:53 +02:00
2023-03-22 13:31:28 +01:00
2022-11-26 09:24:50 +01:00
2022-12-02 17:41:06 +01:00
2023-03-10 09:39:18 +01:00
2022-04-27 14:38:53 +02:00
2022-03-28 09:58:46 +02:00
2023-04-13 16:48:17 +02:00
2022-12-14 11:37:25 +01:00
2023-02-06 07:59:02 +01:00
2023-02-22 12:57:09 +01:00
2023-04-20 12:13:56 +02:00
2022-01-05 12:42:37 +01:00
2023-03-22 13:31:23 +01:00
2022-04-13 20:59:10 +02:00
2023-02-01 08:27:27 +01:00
2023-02-09 11:26:36 +01:00
2023-03-17 08:48:49 +01:00
2023-02-22 12:57:09 +01:00
2023-01-12 11:58:49 +01:00
2022-01-11 15:35:16 +01:00
2023-04-20 12:13:53 +02:00
2023-03-10 09:39:16 +01:00
2022-04-08 14:23:00 +02:00
2023-02-22 12:57:02 +01:00
2022-12-31 13:14:39 +01:00
2023-03-30 12:47:55 +02:00
2023-04-20 12:13:53 +02:00
2023-03-22 13:31:26 +01:00
2021-11-18 19:17:11 +01:00
2023-04-13 16:48:19 +02:00
2021-08-04 12:35:07 +01:00
2023-01-18 11:48:54 +01:00
2023-03-30 12:47:43 +02:00
2023-03-17 08:48:57 +01:00
2022-12-31 13:14:18 +01:00
2023-03-13 10:20:37 +01:00
2023-02-09 11:26:40 +01:00
2023-03-30 12:47:44 +02:00
2023-04-05 11:24:52 +02:00
2022-08-31 17:16:45 +02:00