On 2/28/07, KOVACS Krisztian <[EMAIL PROTECTED]> wrote:
Hi, While reading TCP minisock code I've found this suspiciously looking code fragment: - 8< - struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, struct sk_buff *skb) { struct sock *newsk = inet_csk_clone(sk, req, GFP_ATOMIC); if (newsk != NULL) { const struct inet_request_sock *ireq = inet_rsk(req); struct tcp_request_sock *treq = tcp_rsk(req); struct inet_connection_sock *newicsk = inet_csk(sk); struct tcp_sock *newtp; - 8< - The above code initializes newicsk to inet_csk(sk), isn't that supposed to be inet_csk(newsk)? As far as I can tell this might leave icsk_ack.last_seg_size zero even if we do have received data.
Good catch! David, please apply the attached patch. Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> Thanks Krisztian! - Arnaldo
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index 30b1e52..6b5c64f 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c @@ -381,7 +381,7 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, if (newsk != NULL) { const struct inet_request_sock *ireq = inet_rsk(req); struct tcp_request_sock *treq = tcp_rsk(req); - struct inet_connection_sock *newicsk = inet_csk(sk); + struct inet_connection_sock *newicsk = inet_csk(newsk); struct tcp_sock *newtp; /* Now setup tcp_sock */