Breno Leitao bced3f7db9 tcp: tcp_make_synack() can be called from process context
tcp_rtx_synack() now could be called in process context as explained in
0a375c822497 ("tcp: tcp_rtx_synack() can be called from process
context").

tcp_rtx_synack() might call tcp_make_synack(), which will touch per-CPU
variables with preemption enabled. This causes the following BUG:

    BUG: using __this_cpu_add() in preemptible [00000000] code: ThriftIO1/5464
    caller is tcp_make_synack+0x841/0xac0
    Call Trace:
     <TASK>
     dump_stack_lvl+0x10d/0x1a0
     check_preemption_disabled+0x104/0x110
     tcp_make_synack+0x841/0xac0
     tcp_v6_send_synack+0x5c/0x450
     tcp_rtx_synack+0xeb/0x1f0
     inet_rtx_syn_ack+0x34/0x60
     tcp_check_req+0x3af/0x9e0
     tcp_rcv_state_process+0x59b/0x2030
     tcp_v6_do_rcv+0x5f5/0x700
     release_sock+0x3a/0xf0
     tcp_sendmsg+0x33/0x40
     ____sys_sendmsg+0x2f2/0x490
     __sys_sendmsg+0x184/0x230
     do_syscall_64+0x3d/0x90

Avoid calling __TCP_INC_STATS() with will touch per-cpu variables. Use
TCP_INC_STATS() which is safe to be called from context switch.

Fixes: 8336886f786f ("tcp: TCP Fast Open Server - support TFO listeners")
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20230308190745.780221-1-leitao@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2023-03-09 23:12:00 -08:00
..
2021-05-17 15:29:35 -07:00
2023-01-26 10:52:18 +01:00
2023-02-01 20:54:27 -08:00
2023-02-01 20:54:27 -08:00
2022-11-16 12:48:44 +00:00
2022-11-16 12:48:44 +00:00
2022-11-16 12:48:44 +00:00
2023-01-26 10:52:18 +01:00
2021-05-17 15:29:35 -07:00
2022-06-21 11:38:29 +02:00
2023-02-03 19:56:23 -08:00
2022-09-20 10:21:49 -07:00
2022-12-13 15:47:48 -08:00
2023-02-02 21:14:50 -08:00
2022-12-20 03:13:45 +01:00
2021-05-17 15:29:35 -07:00
2022-11-16 09:43:35 +00:00