Message ID | 20240213134205.8705-4-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | introduce drop reasons for cookie check | expand |
On 2/13/24 6:42 AM, Jason Xing wrote: > diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c > index 38f331da6677..07e201cc3d6a 100644 > --- a/net/ipv4/syncookies.c > +++ b/net/ipv4/syncookies.c > @@ -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); > security_req_classify_flow(req, flowi4_to_flowi_common(&fl4)); > rt = ip_route_output_key(net, &fl4); > - if (IS_ERR(rt)) > + if (IS_ERR(rt)) { > + SKB_DR_SET(reason, IP_ROUTEOUTPUTKEY); Reason names should be based on functional failures, not function names which will change over time. In this case the failure is an output route lookup which is basically SKB_DROP_REASON_IP_OUTNOROUTES
On Tue, Feb 13, 2024 at 11:56 PM David Ahern <dsahern@kernel.org> wrote: > > On 2/13/24 6:42 AM, Jason Xing wrote: > > diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c > > index 38f331da6677..07e201cc3d6a 100644 > > --- a/net/ipv4/syncookies.c > > +++ b/net/ipv4/syncookies.c > > @@ -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); > > security_req_classify_flow(req, flowi4_to_flowi_common(&fl4)); > > rt = ip_route_output_key(net, &fl4); > > - if (IS_ERR(rt)) > > + if (IS_ERR(rt)) { > > + SKB_DR_SET(reason, IP_ROUTEOUTPUTKEY); > > Reason names should be based on functional failures, not function names > which will change over time. In this case the failure is an output route > lookup which is basically SKB_DROP_REASON_IP_OUTNOROUTES You're right. I'll update it soon :) Thanks, Jason > > >
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c index 38f331da6677..07e201cc3d6a 100644 --- a/net/ipv4/syncookies.c +++ b/net/ipv4/syncookies.c @@ -421,8 +421,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) if (IS_ERR(req)) goto out; } - if (!req) + if (!req) { + SKB_DR_SET(reason, NO_REQSK_ALLOC); goto out_drop; + } ireq = inet_rsk(req); @@ -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)); - 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; + } tcp_ao_syncookie(sk, skb, req, AF_INET); @@ -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); security_req_classify_flow(req, flowi4_to_flowi_common(&fl4)); rt = ip_route_output_key(net, &fl4); - if (IS_ERR(rt)) + if (IS_ERR(rt)) { + SKB_DR_SET(reason, IP_ROUTEOUTPUTKEY); goto out_free; + } /* Try to redo what tcp_v4_send_synack did. */ req->rsk_window_clamp = tp->window_clamp ? :dst_metric(&rt->dst, RTAX_WINDOW); @@ -476,10 +482,12 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb) /* ip_queue_xmit() depends on our flow being setup * Normal sockets get it right from inet_csk_route_child_sock() */ - if (ret) + if (ret) { inet_sk(ret)->cork.fl.u.ip4 = fl4; - else + } else { + SKB_DR_SET(reason, COOKIE_NOCHILD); goto out_drop; + } out: return ret; out_free: