diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index f240f57b2199..3e6dafcb1071 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3710,7 +3710,7 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)  	}  	if ((flag & FLAG_FORWARD_PROGRESS) || !(flag & FLAG_NOT_DUP)) -		dst_confirm(sk->sk_dst_cache); +		dst_confirm(__sk_dst_get(sk));  	return 1; @@ -3845,12 +3845,13 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,  					/* 16-bit multiple */  					opt_rx->cookie_plus = opsize;  					*hvpp = ptr; +					break;  				default:  					/* ignore option */  					break; -				}; +				}  				break; -			}; +			}  			ptr += opsize-2;  			length -= opsize; @@ -4319,7 +4320,7 @@ static void tcp_ofo_queue(struct sock *sk)  		}  		if (!after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt)) { -			SOCK_DEBUG(sk, "ofo packet was already received \n"); +			SOCK_DEBUG(sk, "ofo packet was already received\n");  			__skb_unlink(skb, &tp->out_of_order_queue);  			__kfree_skb(skb);  			continue; @@ -4367,6 +4368,7 @@ static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)  	if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq)  		goto drop; +	skb_dst_drop(skb);  	__skb_pull(skb, th->doff * 4);  	TCP_ECN_accept_cwr(tp, skb); @@ -5833,7 +5835,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,  			if (tp->snd_una == tp->write_seq) {  				tcp_set_state(sk, TCP_FIN_WAIT2);  				sk->sk_shutdown |= SEND_SHUTDOWN; -				dst_confirm(sk->sk_dst_cache); +				dst_confirm(__sk_dst_get(sk));  				if (!sock_flag(sk, SOCK_DEAD))  					/* Wake up lingering close() */  |