diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index f19f5fb361b5..29c53fbb2204 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -465,11 +465,12 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
465 | tcp_header_size += TCPOLEN_MD5SIG_ALIGNED; | 465 | tcp_header_size += TCPOLEN_MD5SIG_ALIGNED; |
466 | #endif | 466 | #endif |
467 | 467 | ||
468 | th = (struct tcphdr *) skb_push(skb, tcp_header_size); | 468 | skb_push(skb, tcp_header_size); |
469 | skb->h.th = th; | 469 | skb_reset_transport_header(skb); |
470 | skb_set_owner_w(skb, sk); | 470 | skb_set_owner_w(skb, sk); |
471 | 471 | ||
472 | /* Build TCP header and checksum it. */ | 472 | /* Build TCP header and checksum it. */ |
473 | th = tcp_hdr(skb); | ||
473 | th->source = inet->sport; | 474 | th->source = inet->sport; |
474 | th->dest = inet->dport; | 475 | th->dest = inet->dport; |
475 | th->seq = htonl(tcb->seq); | 476 | th->seq = htonl(tcb->seq); |
@@ -524,7 +525,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
524 | tp->af_specific->calc_md5_hash(md5_hash_location, | 525 | tp->af_specific->calc_md5_hash(md5_hash_location, |
525 | md5, | 526 | md5, |
526 | sk, NULL, NULL, | 527 | sk, NULL, NULL, |
527 | skb->h.th, | 528 | tcp_hdr(skb), |
528 | sk->sk_protocol, | 529 | sk->sk_protocol, |
529 | skb->len); | 530 | skb->len); |
530 | } | 531 | } |
@@ -2128,8 +2129,10 @@ struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst, | |||
2128 | if (md5) | 2129 | if (md5) |
2129 | tcp_header_size += TCPOLEN_MD5SIG_ALIGNED; | 2130 | tcp_header_size += TCPOLEN_MD5SIG_ALIGNED; |
2130 | #endif | 2131 | #endif |
2131 | skb->h.th = th = (struct tcphdr *) skb_push(skb, tcp_header_size); | 2132 | skb_push(skb, tcp_header_size); |
2133 | skb_reset_transport_header(skb); | ||
2132 | 2134 | ||
2135 | th = tcp_hdr(skb); | ||
2133 | memset(th, 0, sizeof(struct tcphdr)); | 2136 | memset(th, 0, sizeof(struct tcphdr)); |
2134 | th->syn = 1; | 2137 | th->syn = 1; |
2135 | th->ack = 1; | 2138 | th->ack = 1; |
@@ -2183,7 +2186,7 @@ struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst, | |||
2183 | tp->af_specific->calc_md5_hash(md5_hash_location, | 2186 | tp->af_specific->calc_md5_hash(md5_hash_location, |
2184 | md5, | 2187 | md5, |
2185 | NULL, dst, req, | 2188 | NULL, dst, req, |
2186 | skb->h.th, sk->sk_protocol, | 2189 | tcp_hdr(skb), sk->sk_protocol, |
2187 | skb->len); | 2190 | skb->len); |
2188 | } | 2191 | } |
2189 | #endif | 2192 | #endif |