tcp: Cache sock_net(sk) in cookie_v[46]_check().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Wed, 29 Nov 2023 02:29:18 +0000 (18:29 -0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 30 Nov 2023 04:16:09 +0000 (20:16 -0800)
sock_net(sk) is used repeatedly in cookie_v[46]_check().
Let's cache it in a variable.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20231129022924.96156-3-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv4/syncookies.c
net/ipv6/syncookies.c

index a0118ea76734ff6d11c9def23124d32692f59cac..fb41bb18fe6b76d75bcd2574b29758b993baba3d 100644 (file)
@@ -336,6 +336,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
        struct tcp_options_received tcp_opt;
        struct tcp_sock *tp = tcp_sk(sk);
        struct inet_request_sock *ireq;
+       struct net *net = sock_net(sk);
        struct tcp_request_sock *treq;
        struct request_sock *req;
        struct sock *ret = sk;
@@ -346,7 +347,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
        u32 tsoff = 0;
        int l3index;
 
-       if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_syncookies) ||
+       if (!READ_ONCE(net->ipv4.sysctl_tcp_syncookies) ||
            !th->ack || th->rst)
                goto out;
 
@@ -355,24 +356,24 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
 
        mss = __cookie_v4_check(ip_hdr(skb), th, cookie);
        if (mss == 0) {
-               __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESFAILED);
+               __NET_INC_STATS(net, LINUX_MIB_SYNCOOKIESFAILED);
                goto out;
        }
 
-       __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESRECV);
+       __NET_INC_STATS(net, LINUX_MIB_SYNCOOKIESRECV);
 
        /* check for timestamp cookie support */
        memset(&tcp_opt, 0, sizeof(tcp_opt));
-       tcp_parse_options(sock_net(sk), skb, &tcp_opt, 0, NULL);
+       tcp_parse_options(net, skb, &tcp_opt, 0, NULL);
 
        if (tcp_opt.saw_tstamp && tcp_opt.rcv_tsecr) {
-               tsoff = secure_tcp_ts_off(sock_net(sk),
+               tsoff = secure_tcp_ts_off(net,
                                          ip_hdr(skb)->daddr,
                                          ip_hdr(skb)->saddr);
                tcp_opt.rcv_tsecr -= tsoff;
        }
 
-       if (!cookie_timestamp_decode(sock_net(sk), &tcp_opt))
+       if (!cookie_timestamp_decode(net, &tcp_opt))
                goto out;
 
        ret = NULL;
@@ -406,13 +407,13 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
 
        ireq->ir_iif = inet_request_bound_dev_if(sk, skb);
 
-       l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif);
+       l3index = l3mdev_master_ifindex_by_index(net, ireq->ir_iif);
        tcp_ao_syncookie(sk, skb, treq, AF_INET, l3index);
 
        /* We throwed the options of the initial SYN away, so we hope
         * the ACK carries the same options again (see RFC1122 4.2.3.8)
         */
-       RCU_INIT_POINTER(ireq->ireq_opt, tcp_v4_save_options(sock_net(sk), skb));
+       RCU_INIT_POINTER(ireq->ireq_opt, tcp_v4_save_options(net, skb));
 
        if (security_inet_conn_request(sk, skb, req)) {
                reqsk_free(req);
@@ -433,7 +434,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
                           opt->srr ? opt->faddr : ireq->ir_rmt_addr,
                           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(sock_net(sk), &fl4);
+       rt = ip_route_output_key(net, &fl4);
        if (IS_ERR(rt)) {
                reqsk_free(req);
                goto out;
@@ -453,7 +454,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
                                  dst_metric(&rt->dst, RTAX_INITRWND));
 
        ireq->rcv_wscale  = rcv_wscale;
-       ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), &rt->dst);
+       ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, net, &rt->dst);
 
        ret = tcp_get_cookie_sock(sk, skb, req, &rt->dst, tsoff);
        /* ip_queue_xmit() depends on our flow being setup
index aa5fb5486cde901bffa161f834ec960268cc8da9..ba394fa73f41f89d20fe6ab772612efd20863bc2 100644 (file)
@@ -133,6 +133,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
        struct tcp_options_received tcp_opt;
        struct tcp_sock *tp = tcp_sk(sk);
        struct inet_request_sock *ireq;
+       struct net *net = sock_net(sk);
        struct tcp_request_sock *treq;
        struct request_sock *req;
        struct dst_entry *dst;
@@ -142,7 +143,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
        u32 tsoff = 0;
        int l3index;
 
-       if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_syncookies) ||
+       if (!READ_ONCE(net->ipv4.sysctl_tcp_syncookies) ||
            !th->ack || th->rst)
                goto out;
 
@@ -151,24 +152,24 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
 
        mss = __cookie_v6_check(ipv6_hdr(skb), th, cookie);
        if (mss == 0) {
-               __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESFAILED);
+               __NET_INC_STATS(net, LINUX_MIB_SYNCOOKIESFAILED);
                goto out;
        }
 
-       __NET_INC_STATS(sock_net(sk), LINUX_MIB_SYNCOOKIESRECV);
+       __NET_INC_STATS(net, LINUX_MIB_SYNCOOKIESRECV);
 
        /* check for timestamp cookie support */
        memset(&tcp_opt, 0, sizeof(tcp_opt));
-       tcp_parse_options(sock_net(sk), skb, &tcp_opt, 0, NULL);
+       tcp_parse_options(net, skb, &tcp_opt, 0, NULL);
 
        if (tcp_opt.saw_tstamp && tcp_opt.rcv_tsecr) {
-               tsoff = secure_tcpv6_ts_off(sock_net(sk),
+               tsoff = secure_tcpv6_ts_off(net,
                                            ipv6_hdr(skb)->daddr.s6_addr32,
                                            ipv6_hdr(skb)->saddr.s6_addr32);
                tcp_opt.rcv_tsecr -= tsoff;
        }
 
-       if (!cookie_timestamp_decode(sock_net(sk), &tcp_opt))
+       if (!cookie_timestamp_decode(net, &tcp_opt))
                goto out;
 
        ret = NULL;
@@ -217,7 +218,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
        treq->ts_off = 0;
        treq->txhash = net_tx_rndhash();
 
-       l3index = l3mdev_master_ifindex_by_index(sock_net(sk), ireq->ir_iif);
+       l3index = l3mdev_master_ifindex_by_index(net, ireq->ir_iif);
        tcp_ao_syncookie(sk, skb, treq, AF_INET6, l3index);
 
        if (IS_ENABLED(CONFIG_SMC))
@@ -243,7 +244,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
                fl6.flowi6_uid = sk->sk_uid;
                security_req_classify_flow(req, flowi6_to_flowi_common(&fl6));
 
-               dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
+               dst = ip6_dst_lookup_flow(net, sk, &fl6, final_p);
                if (IS_ERR(dst))
                        goto out_free;
        }
@@ -261,7 +262,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
                                  dst_metric(dst, RTAX_INITRWND));
 
        ireq->rcv_wscale = rcv_wscale;
-       ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), dst);
+       ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, net, dst);
 
        ret = tcp_get_cookie_sock(sk, skb, req, dst, tsoff);
 out: