diff options
| -rw-r--r-- | net/dccp/input.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/dccp/input.c b/net/dccp/input.c index 1b6b2cb12376..3454d5941900 100644 --- a/net/dccp/input.c +++ b/net/dccp/input.c | |||
| @@ -375,6 +375,9 @@ static int dccp_rcv_respond_partopen_state_process(struct sock *sk, | |||
| 375 | case DCCP_PKT_RESET: | 375 | case DCCP_PKT_RESET: |
| 376 | inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); | 376 | inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK); |
| 377 | break; | 377 | break; |
| 378 | case DCCP_PKT_DATA: | ||
| 379 | if (sk->sk_state == DCCP_RESPOND) | ||
| 380 | break; | ||
| 378 | case DCCP_PKT_DATAACK: | 381 | case DCCP_PKT_DATAACK: |
| 379 | case DCCP_PKT_ACK: | 382 | case DCCP_PKT_ACK: |
| 380 | /* | 383 | /* |
| @@ -393,7 +396,8 @@ static int dccp_rcv_respond_partopen_state_process(struct sock *sk, | |||
| 393 | dccp_sk(sk)->dccps_osr = DCCP_SKB_CB(skb)->dccpd_seq; | 396 | dccp_sk(sk)->dccps_osr = DCCP_SKB_CB(skb)->dccpd_seq; |
| 394 | dccp_set_state(sk, DCCP_OPEN); | 397 | dccp_set_state(sk, DCCP_OPEN); |
| 395 | 398 | ||
| 396 | if (dh->dccph_type == DCCP_PKT_DATAACK) { | 399 | if (dh->dccph_type == DCCP_PKT_DATAACK || |
| 400 | dh->dccph_type == DCCP_PKT_DATA) { | ||
| 397 | dccp_rcv_established(sk, skb, dh, len); | 401 | dccp_rcv_established(sk, skb, dh, len); |
| 398 | queued = 1; /* packet was queued | 402 | queued = 1; /* packet was queued |
| 399 | (by dccp_rcv_established) */ | 403 | (by dccp_rcv_established) */ |
