diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 788851ca8c5d..ae3ec15fb630 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -62,6 +62,7 @@ | |||
62 | */ | 62 | */ |
63 | 63 | ||
64 | #include <linux/mm.h> | 64 | #include <linux/mm.h> |
65 | #include <linux/slab.h> | ||
65 | #include <linux/module.h> | 66 | #include <linux/module.h> |
66 | #include <linux/sysctl.h> | 67 | #include <linux/sysctl.h> |
67 | #include <linux/kernel.h> | 68 | #include <linux/kernel.h> |
@@ -2511,6 +2512,9 @@ static void tcp_mark_head_lost(struct sock *sk, int packets) | |||
2511 | int err; | 2512 | int err; |
2512 | unsigned int mss; | 2513 | unsigned int mss; |
2513 | 2514 | ||
2515 | if (packets == 0) | ||
2516 | return; | ||
2517 | |||
2514 | WARN_ON(packets > tp->packets_out); | 2518 | WARN_ON(packets > tp->packets_out); |
2515 | if (tp->lost_skb_hint) { | 2519 | if (tp->lost_skb_hint) { |
2516 | skb = tp->lost_skb_hint; | 2520 | skb = tp->lost_skb_hint; |
@@ -3706,7 +3710,7 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag) | |||
3706 | } | 3710 | } |
3707 | 3711 | ||
3708 | if ((flag & FLAG_FORWARD_PROGRESS) || !(flag & FLAG_NOT_DUP)) | 3712 | if ((flag & FLAG_FORWARD_PROGRESS) || !(flag & FLAG_NOT_DUP)) |
3709 | dst_confirm(sk->sk_dst_cache); | 3713 | dst_confirm(__sk_dst_get(sk)); |
3710 | 3714 | ||
3711 | return 1; | 3715 | return 1; |
3712 | 3716 | ||
@@ -4315,7 +4319,7 @@ static void tcp_ofo_queue(struct sock *sk) | |||
4315 | } | 4319 | } |
4316 | 4320 | ||
4317 | if (!after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt)) { | 4321 | if (!after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt)) { |
4318 | SOCK_DEBUG(sk, "ofo packet was already received \n"); | 4322 | SOCK_DEBUG(sk, "ofo packet was already received\n"); |
4319 | __skb_unlink(skb, &tp->out_of_order_queue); | 4323 | __skb_unlink(skb, &tp->out_of_order_queue); |
4320 | __kfree_skb(skb); | 4324 | __kfree_skb(skb); |
4321 | continue; | 4325 | continue; |
@@ -5829,7 +5833,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, | |||
5829 | if (tp->snd_una == tp->write_seq) { | 5833 | if (tp->snd_una == tp->write_seq) { |
5830 | tcp_set_state(sk, TCP_FIN_WAIT2); | 5834 | tcp_set_state(sk, TCP_FIN_WAIT2); |
5831 | sk->sk_shutdown |= SEND_SHUTDOWN; | 5835 | sk->sk_shutdown |= SEND_SHUTDOWN; |
5832 | dst_confirm(sk->sk_dst_cache); | 5836 | dst_confirm(__sk_dst_get(sk)); |
5833 | 5837 | ||
5834 | if (!sock_flag(sk, SOCK_DEAD)) | 5838 | if (!sock_flag(sk, SOCK_DEAD)) |
5835 | /* Wake up lingering close() */ | 5839 | /* Wake up lingering close() */ |