diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index bf1aac315490..188980c58f87 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -6002,11 +6002,13 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb) | |||
6002 | if (th->fin) | 6002 | if (th->fin) |
6003 | goto discard; | 6003 | goto discard; |
6004 | /* It is possible that we process SYN packets from backlog, | 6004 | /* It is possible that we process SYN packets from backlog, |
6005 | * so we need to make sure to disable BH right there. | 6005 | * so we need to make sure to disable BH and RCU right there. |
6006 | */ | 6006 | */ |
6007 | rcu_read_lock(); | ||
6007 | local_bh_disable(); | 6008 | local_bh_disable(); |
6008 | acceptable = icsk->icsk_af_ops->conn_request(sk, skb) >= 0; | 6009 | acceptable = icsk->icsk_af_ops->conn_request(sk, skb) >= 0; |
6009 | local_bh_enable(); | 6010 | local_bh_enable(); |
6011 | rcu_read_unlock(); | ||
6010 | 6012 | ||
6011 | if (!acceptable) | 6013 | if (!acceptable) |
6012 | return 1; | 6014 | return 1; |