diff -urN 2.4.4ac5/net/ipv4/tcp.c 2.4.4ac6/net/ipv4/tcp.c --- 2.4.4ac5/net/ipv4/tcp.c Sat May 5 02:04:52 2001 +++ 2.4.4ac6/net/ipv4/tcp.c Wed May 9 04:04:24 2001 @@ -1122,8 +1122,16 @@ /* Time to copy data. We are close to the end! */ err = tcp_copy_to_page(sk, from, skb, page, off, copy); - if (err) + if (err) { + /* If this page was new, give it to the + * socket so it does not get leaked. + */ + if (TCP_PAGE(sk) == NULL) { + TCP_PAGE(sk) = page; + TCP_OFF(sk) = 0; + } goto do_error; + } /* Update the skb. */ if (merge) {