From 811265b8e8bf84e3b91507bf6a3a8eea20e7a4b7 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Tue, 13 Sep 2005 19:03:15 -0300 Subject: [DCCP]: Check if already in the CLOSING state in dccp_rcv_closereq It is possible to receive more than one CLOSEREQ packet if the CLOSE packet sent in response is somehow lost, change the state to DCCP_CLOSING only on the first CLOSEREQ packet received. Signed-off-by: Arnaldo Carvalho de Melo --- net/dccp/input.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'net') diff --git a/net/dccp/input.c b/net/dccp/input.c index c60bc3433f5e..f01d588299c8 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c @@ -50,7 +50,8 @@ static void dccp_rcv_closereq(struct sock *sk, struct sk_buff *skb) return; } - dccp_set_state(sk, DCCP_CLOSING); + if (sk->sk_state != DCCP_CLOSING) + dccp_set_state(sk, DCCP_CLOSING); dccp_send_close(sk, 0); } -- cgit v1.2.3 From 2b80230a7f8cd346c1e2ebafdd02be432bf10459 Mon Sep 17 00:00:00 2001 From: Arnaldo Carvalho de Melo Date: Tue, 13 Sep 2005 19:05:08 -0300 Subject: [DCCP]: Handle SYNC packets in dccp_rcv_state_process Eliciting a SYNCACK in response, we were handling SYNC packets only in the DCCP_OPEN state, in dccp_rcv_established. Signed-off-by: Arnaldo Carvalho de Melo --- net/dccp/input.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'net') diff --git a/net/dccp/input.c b/net/dccp/input.c index f01d588299c8..c74034cf7ede 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c @@ -562,6 +562,12 @@ int dccp_rcv_state_process(struct sock *sk, struct sk_buff *skb, return 0; } + if (unlikely(dh->dccph_type == DCCP_PKT_SYNC)) { + dccp_send_sync(sk, DCCP_SKB_CB(skb)->dccpd_seq, + DCCP_PKT_SYNCACK); + goto discard; + } + switch (sk->sk_state) { case DCCP_CLOSED: return 1; -- cgit v1.2.3