Commit a4a69a37 authored by Jason Xing's avatar Jason Xing Committed by David S. Miller

tcp: use drop reasons in cookie check for ipv4

Now it's time to use the prepared definitions to refine this part.
Four reasons used might enough for now, I think.
Signed-off-by: default avatarJason Xing <kernelxing@tencent.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 65be4393
...@@ -421,8 +421,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) ...@@ -421,8 +421,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
if (IS_ERR(req)) if (IS_ERR(req))
goto out; goto out;
} }
if (!req) if (!req) {
SKB_DR_SET(reason, NO_SOCKET);
goto out_drop; goto out_drop;
}
ireq = inet_rsk(req); ireq = inet_rsk(req);
...@@ -434,8 +436,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) ...@@ -434,8 +436,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
*/ */
RCU_INIT_POINTER(ireq->ireq_opt, tcp_v4_save_options(net, skb)); RCU_INIT_POINTER(ireq->ireq_opt, tcp_v4_save_options(net, skb));
if (security_inet_conn_request(sk, skb, req)) if (security_inet_conn_request(sk, skb, req)) {
SKB_DR_SET(reason, SECURITY_HOOK);
goto out_free; goto out_free;
}
tcp_ao_syncookie(sk, skb, req, AF_INET); tcp_ao_syncookie(sk, skb, req, AF_INET);
...@@ -452,8 +456,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) ...@@ -452,8 +456,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
ireq->ir_loc_addr, th->source, th->dest, sk->sk_uid); ireq->ir_loc_addr, th->source, th->dest, sk->sk_uid);
security_req_classify_flow(req, flowi4_to_flowi_common(&fl4)); security_req_classify_flow(req, flowi4_to_flowi_common(&fl4));
rt = ip_route_output_key(net, &fl4); rt = ip_route_output_key(net, &fl4);
if (IS_ERR(rt)) if (IS_ERR(rt)) {
SKB_DR_SET(reason, IP_OUTNOROUTES);
goto out_free; goto out_free;
}
/* Try to redo what tcp_v4_send_synack did. */ /* Try to redo what tcp_v4_send_synack did. */
req->rsk_window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW); req->rsk_window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW);
...@@ -476,10 +482,11 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) ...@@ -476,10 +482,11 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
/* ip_queue_xmit() depends on our flow being setup /* ip_queue_xmit() depends on our flow being setup
* Normal sockets get it right from inet_csk_route_child_sock() * Normal sockets get it right from inet_csk_route_child_sock()
*/ */
if (ret) if (!ret) {
inet_sk(ret)->cork.fl.u.ip4 = fl4; SKB_DR_SET(reason, NO_SOCKET);
else
goto out_drop; goto out_drop;
}
inet_sk(ret)->cork.fl.u.ip4 = fl4;
out: out:
return ret; return ret;
out_free: out_free:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment