aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/panic.c
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2008-08-18 21:14:20 -0700
committerDavid S. Miller <davem@davemloft.net>2008-08-18 21:14:20 -0700
commitd28934ad8a4e87203a95de9c376611de8bc2f013 (patch)
tree4ee2a055492d3c462101edd9945e199450497f30 /kernel/panic.c
parent4d8863a29c4755a0461cd31b6865026187d6c43a (diff)
downloadkernel_samsung_smdk4412-d28934ad8a4e87203a95de9c376611de8bc2f013.zip
kernel_samsung_smdk4412-d28934ad8a4e87203a95de9c376611de8bc2f013.tar.gz
kernel_samsung_smdk4412-d28934ad8a4e87203a95de9c376611de8bc2f013.tar.bz2
dccp: Fix panic caused by too early termination of retransmission mechanism
Thanks is due to Wei Yongjun for the detailed analysis and description of this bug at http://marc.info/?l=dccp&m=121739364909199&w=2 The problem is that invalid packets received by a client in state REQUEST cause the retransmission timer for the DCCP-Request to be reset. This includes freeing the Request-skb ( in dccp_rcv_request_sent_state_process() ). As a consequence, * the arrival of further packets cause a double-free, triggering a panic(), * the connection then may hang, since further retransmissions are blocked. This patch changes the order of statements so that the retransmission timer is reset, and the pending Request freed, only if a valid Response has arrived (or the number of sysctl-retries has been exhausted). Further changes: ---------------- To be on the safe side, replaced __kfree_skb with kfree_skb so that if due to unexpected circumstances the sk_send_head is NULL the WARN_ON is used instead. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/panic.c')
0 files changed, 0 insertions, 0 deletions