@@ -284,6 +284,16 @@ int mptcp_subflow_init_cookie_req(struct request_sock *req,
284284}
285285EXPORT_SYMBOL_GPL (mptcp_subflow_init_cookie_req );
286286
287+ static enum sk_rst_reason mptcp_get_rst_reason (const struct sk_buff * skb )
288+ {
289+ const struct mptcp_ext * mpext = mptcp_get_ext (skb );
290+
291+ if (!mpext )
292+ return SK_RST_REASON_NOT_SPECIFIED ;
293+
294+ return sk_rst_convert_mptcp_reason (mpext -> reset_reason );
295+ }
296+
287297static struct dst_entry * subflow_v4_route_req (const struct sock * sk ,
288298 struct sk_buff * skb ,
289299 struct flowi * fl ,
@@ -304,13 +314,9 @@ static struct dst_entry *subflow_v4_route_req(const struct sock *sk,
304314 return dst ;
305315
306316 dst_release (dst );
307- if (!req -> syncookie ) {
308- struct mptcp_ext * mpext = mptcp_get_ext (skb );
309- enum sk_rst_reason reason ;
310-
311- reason = sk_rst_convert_mptcp_reason (mpext -> reset_reason );
312- tcp_request_sock_ops .send_reset (sk , skb , reason );
313- }
317+ if (!req -> syncookie )
318+ tcp_request_sock_ops .send_reset (sk , skb ,
319+ mptcp_get_rst_reason (skb ));
314320 return NULL ;
315321}
316322
@@ -376,13 +382,9 @@ static struct dst_entry *subflow_v6_route_req(const struct sock *sk,
376382 return dst ;
377383
378384 dst_release (dst );
379- if (!req -> syncookie ) {
380- struct mptcp_ext * mpext = mptcp_get_ext (skb );
381- enum sk_rst_reason reason ;
382-
383- reason = sk_rst_convert_mptcp_reason (mpext -> reset_reason );
384- tcp6_request_sock_ops .send_reset (sk , skb , reason );
385- }
385+ if (!req -> syncookie )
386+ tcp6_request_sock_ops .send_reset (sk , skb ,
387+ mptcp_get_rst_reason (skb ));
386388 return NULL ;
387389}
388390#endif
@@ -913,7 +915,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
913915 tcp_rsk (req )-> drop_req = true;
914916 inet_csk_prepare_for_destroy_sock (child );
915917 tcp_done (child );
916- reason = sk_rst_convert_mptcp_reason ( mptcp_get_ext ( skb ) -> reset_reason );
918+ reason = mptcp_get_rst_reason ( skb );
917919 req -> rsk_ops -> send_reset (sk , skb , reason );
918920
919921 /* The last child reference will be released by the caller */
0 commit comments