hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/net/core/stream.c
....@@ -73,8 +73,8 @@
7373 add_wait_queue(sk_sleep(sk), &wait);
7474 sk->sk_write_pending++;
7575 done = sk_wait_event(sk, timeo_p,
76
- !sk->sk_err &&
77
- !((1 << sk->sk_state) &
76
+ !READ_ONCE(sk->sk_err) &&
77
+ !((1 << READ_ONCE(sk->sk_state)) &
7878 ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)), &wait);
7979 remove_wait_queue(sk_sleep(sk), &wait);
8080 sk->sk_write_pending--;
....@@ -87,9 +87,9 @@
8787 * sk_stream_closing - Return 1 if we still have things to send in our buffers.
8888 * @sk: socket to verify
8989 */
90
-static inline int sk_stream_closing(struct sock *sk)
90
+static int sk_stream_closing(const struct sock *sk)
9191 {
92
- return (1 << sk->sk_state) &
92
+ return (1 << READ_ONCE(sk->sk_state)) &
9393 (TCPF_FIN_WAIT1 | TCPF_CLOSING | TCPF_LAST_ACK);
9494 }
9595
....@@ -142,8 +142,8 @@
142142
143143 set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
144144 sk->sk_write_pending++;
145
- sk_wait_event(sk, &current_timeo, sk->sk_err ||
146
- (sk->sk_shutdown & SEND_SHUTDOWN) ||
145
+ sk_wait_event(sk, &current_timeo, READ_ONCE(sk->sk_err) ||
146
+ (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN) ||
147147 (sk_stream_memory_free(sk) &&
148148 !vm_wait), &wait);
149149 sk->sk_write_pending--;
....@@ -196,6 +196,12 @@
196196 /* First the read buffer. */
197197 __skb_queue_purge(&sk->sk_receive_queue);
198198
199
+ /* Next, the error queue.
200
+ * We need to use queue lock, because other threads might
201
+ * add packets to the queue without socket lock being held.
202
+ */
203
+ skb_queue_purge(&sk->sk_error_queue);
204
+
199205 /* Next, the write queue. */
200206 WARN_ON(!skb_queue_empty(&sk->sk_write_queue));
201207
....@@ -203,7 +209,6 @@
203209 sk_mem_reclaim(sk);
204210
205211 WARN_ON(sk->sk_wmem_queued);
206
- WARN_ON(sk->sk_forward_alloc);
207212
208213 /* It is _impossible_ for the backlog to contain anything
209214 * when we get here. All user references to this socket