Messages in this thread Patch in this message | | | From | "Steven J. Magnani" <> | Subject | [PATCH] net: Fix oops from tcp_collapse() when using splice() | Date | Tue, 30 Mar 2010 15:45:13 -0500 |
| |
tcp_read_sock() can have a eat skbs without immediately advancing copied_seq. This can cause a panic in tcp_collapse() if it is called as a result of the recv_actor dropping the socket lock.
A userspace program that splices data from a socket to either another socket or to a file can trigger this bug.
Signed-off-by: Steven J. Magnani <steve@digidescorp.com> --- diff -uprN a/net/ipv4/tcp.c b/net/ipv4/tcp.c --- a/net/ipv4/tcp.c 2010-03-30 15:25:55.000000000 -0500 +++ b/net/ipv4/tcp.c 2010-03-30 15:27:49.000000000 -0500 @@ -1335,6 +1335,7 @@ int tcp_read_sock(struct sock *sk, read_ sk_eat_skb(sk, skb, 0); if (!desc->count) break; + tp->copied_seq = seq; } tp->copied_seq = seq;
| |