aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/dccp/ipv4.c15
-rw-r--r--net/dccp/ipv6.c22
2 files changed, 14 insertions, 23 deletions
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index ce8eed32dbeb..7107885ada7e 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -910,8 +910,7 @@ static int dccp_v4_rcv(struct sk_buff *skb)
910 dccp_pr_debug_cat("\n"); 910 dccp_pr_debug_cat("\n");
911 } else { 911 } else {
912 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb); 912 DCCP_SKB_CB(skb)->dccpd_ack_seq = dccp_hdr_ack_seq(skb);
913 dccp_pr_debug_cat(", ack=%llu\n", 913 dccp_pr_debug_cat(", ack=%llu\n", (unsigned long long)
914 (unsigned long long)
915 DCCP_SKB_CB(skb)->dccpd_ack_seq); 914 DCCP_SKB_CB(skb)->dccpd_ack_seq);
916 } 915 }
917 916
@@ -940,11 +939,10 @@ static int dccp_v4_rcv(struct sk_buff *skb)
940 * Generate Reset(No Connection) unless P.type == Reset 939 * Generate Reset(No Connection) unless P.type == Reset
941 * Drop packet and return 940 * Drop packet and return
942 */ 941 */
943
944 if (sk->sk_state == DCCP_TIME_WAIT) { 942 if (sk->sk_state == DCCP_TIME_WAIT) {
945 dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: " 943 dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: do_time_wait\n");
946 "do_time_wait\n"); 944 inet_twsk_put(inet_twsk(sk));
947 goto do_time_wait; 945 goto no_dccp_socket;
948 } 946 }
949 947
950 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) 948 if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb))
@@ -968,17 +966,12 @@ no_dccp_socket:
968 } 966 }
969 967
970discard_it: 968discard_it:
971 /* Discard frame. */
972 kfree_skb(skb); 969 kfree_skb(skb);
973 return 0; 970 return 0;
974 971
975discard_and_relse: 972discard_and_relse:
976 sock_put(sk); 973 sock_put(sk);
977 goto discard_it; 974 goto discard_it;
978
979do_time_wait:
980 inet_twsk_put(inet_twsk(sk));
981 goto no_dccp_socket;
982} 975}
983 976
984static struct inet_connection_sock_af_ops dccp_ipv4_af_ops = { 977static struct inet_connection_sock_af_ops dccp_ipv4_af_ops = {
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
index 116bddb64b80..dee085301576 100644
--- a/net/dccp/ipv6.c
+++ b/net/dccp/ipv6.c
@@ -1071,8 +1071,11 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
1071 * Generate Reset(No Connection) unless P.type == Reset 1071 * Generate Reset(No Connection) unless P.type == Reset
1072 * Drop packet and return 1072 * Drop packet and return
1073 */ 1073 */
1074 if (sk == NULL) 1074 if (sk == NULL) {
1075 dccp_pr_debug("failed to look up flow ID in table and "
1076 "get corresponding socket\n");
1075 goto no_dccp_socket; 1077 goto no_dccp_socket;
1078 }
1076 1079
1077 /* 1080 /*
1078 * Step 2: 1081 * Step 2:
@@ -1080,8 +1083,11 @@ static int dccp_v6_rcv(struct sk_buff **pskb)
1080 * Generate Reset(No Connection) unless P.type == Reset 1083 * Generate Reset(No Connection) unless P.type == Reset
1081 * Drop packet and return 1084 * Drop packet and return
1082 */ 1085 */
1083 if (sk->sk_state == DCCP_TIME_WAIT) 1086 if (sk->sk_state == DCCP_TIME_WAIT) {
1084 goto do_time_wait; 1087 dccp_pr_debug("sk->sk_state == DCCP_TIME_WAIT: do_time_wait\n");
1088 inet_twsk_put(inet_twsk(sk));
1089 goto no_dccp_socket;
1090 }
1085 1091
1086 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb)) 1092 if (!xfrm6_policy_check(sk, XFRM_POLICY_IN, skb))
1087 goto discard_and_relse; 1093 goto discard_and_relse;
@@ -1101,22 +1107,14 @@ no_dccp_socket:
1101 DCCP_RESET_CODE_NO_CONNECTION; 1107 DCCP_RESET_CODE_NO_CONNECTION;
1102 dccp_v6_ctl_send_reset(skb); 1108 dccp_v6_ctl_send_reset(skb);
1103 } 1109 }
1104discard_it:
1105
1106 /*
1107 * Discard frame
1108 */
1109 1110
1111discard_it:
1110 kfree_skb(skb); 1112 kfree_skb(skb);
1111 return 0; 1113 return 0;
1112 1114
1113discard_and_relse: 1115discard_and_relse:
1114 sock_put(sk); 1116 sock_put(sk);
1115 goto discard_it; 1117 goto discard_it;
1116
1117do_time_wait:
1118 inet_twsk_put(inet_twsk(sk));
1119 goto no_dccp_socket;
1120} 1118}
1121 1119
1122static struct inet_connection_sock_af_ops dccp_ipv6_af_ops = { 1120static struct inet_connection_sock_af_ops dccp_ipv6_af_ops = {