summaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>2010-07-19 01:16:18 +0000
committerDavid S. Miller <davem@davemloft.net>2010-07-19 12:43:49 -0700
commit45e77d314585869dfe43c82679f7e08c9b35b898 (patch)
tree73c6322600e47a44a8c171abff392a61eac53be9 /net/ipv4/tcp_output.c
parentb508998f665ee6d6a15eae11be258c3e94c33562 (diff)
downloadop-kernel-dev-45e77d314585869dfe43c82679f7e08c9b35b898.zip
op-kernel-dev-45e77d314585869dfe43c82679f7e08c9b35b898.tar.gz
tcp: fix crash in tcp_xmit_retransmit_queue
It can happen that there are no packets in queue while calling tcp_xmit_retransmit_queue(). tcp_write_queue_head() then returns NULL and that gets deref'ed to get sacked into a local var. There is no work to do if no packets are outstanding so we just exit early. This oops was introduced by 08ebd1721ab8fd (tcp: remove tp->lost_out guard to make joining diff nicer). Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Reported-by: Lennart Schulte <lennart.schulte@nets.rwth-aachen.de> Tested-by: Lennart Schulte <lennart.schulte@nets.rwth-aachen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index b4ed957..7ed9dc1 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2208,6 +2208,9 @@ void tcp_xmit_retransmit_queue(struct sock *sk)
int mib_idx;
int fwd_rexmitting = 0;
+ if (!tp->packets_out)
+ return;
+
if (!tp->lost_out)
tp->retransmit_high = tp->snd_una;
OpenPOWER on IntegriCloud