}
 EXPORT_SYMBOL_GPL(mptcp_subflow_init_cookie_req);
 
+static enum sk_rst_reason mptcp_get_rst_reason(const struct sk_buff *skb)
+{
+       const struct mptcp_ext *mpext = mptcp_get_ext(skb);
+
+       if (!mpext)
+               return SK_RST_REASON_NOT_SPECIFIED;
+
+       return sk_rst_convert_mptcp_reason(mpext->reset_reason);
+}
+
 static struct dst_entry *subflow_v4_route_req(const struct sock *sk,
                                              struct sk_buff *skb,
                                              struct flowi *fl,
                return dst;
 
        dst_release(dst);
-       if (!req->syncookie) {
-               struct mptcp_ext *mpext = mptcp_get_ext(skb);
-               enum sk_rst_reason reason;
-
-               reason = sk_rst_convert_mptcp_reason(mpext->reset_reason);
-               tcp_request_sock_ops.send_reset(sk, skb, reason);
-       }
+       if (!req->syncookie)
+               tcp_request_sock_ops.send_reset(sk, skb,
+                                               mptcp_get_rst_reason(skb));
        return NULL;
 }
 
                return dst;
 
        dst_release(dst);
-       if (!req->syncookie) {
-               struct mptcp_ext *mpext = mptcp_get_ext(skb);
-               enum sk_rst_reason reason;
-
-               reason = sk_rst_convert_mptcp_reason(mpext->reset_reason);
-               tcp6_request_sock_ops.send_reset(sk, skb, reason);
-       }
+       if (!req->syncookie)
+               tcp6_request_sock_ops.send_reset(sk, skb,
+                                                mptcp_get_rst_reason(skb));
        return NULL;
 }
 #endif
        tcp_rsk(req)->drop_req = true;
        inet_csk_prepare_for_destroy_sock(child);
        tcp_done(child);
-       reason = sk_rst_convert_mptcp_reason(mptcp_get_ext(skb)->reset_reason);
+       reason = mptcp_get_rst_reason(skb);
        req->rsk_ops->send_reset(sk, skb, reason);
 
        /* The last child reference will be released by the caller */