]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
net-timestamp: namespacify the sysctl_tstamp_allow_data
authorJason Xing <kernelxing@tencent.com>
Sat, 5 Oct 2024 22:26:09 +0000 (07:26 +0900)
committerJakub Kicinski <kuba@kernel.org>
Tue, 8 Oct 2024 22:33:11 +0000 (15:33 -0700)
Let it be tuned in per netns by admins.

Signed-off-by: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20241005222609.94980-1-kerneljasonxing@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/netns/core.h
include/net/sock.h
net/core/net_namespace.c
net/core/skbuff.c
net/core/sock.c
net/core/sysctl_net_core.c

index 78214f1b43a20199f2dd315b149141c90eb1b066..9b36f0ff0c200c9cf89753f2c78a3ee0fe5256b7 100644 (file)
@@ -15,6 +15,7 @@ struct netns_core {
        int     sysctl_somaxconn;
        int     sysctl_optmem_max;
        u8      sysctl_txrehash;
+       u8      sysctl_tstamp_allow_data;
 
 #ifdef CONFIG_PROC_FS
        struct prot_inuse __percpu *prot_inuse;
index e282127092aba205c038046e1e8078cf2582c075..b32f1424ecc52e4a299a207c029192475c1b6a65 100644 (file)
@@ -2824,8 +2824,6 @@ void sk_get_meminfo(const struct sock *sk, u32 *meminfo);
 extern __u32 sysctl_wmem_max;
 extern __u32 sysctl_rmem_max;
 
-extern int sysctl_tstamp_allow_data;
-
 extern __u32 sysctl_wmem_default;
 extern __u32 sysctl_rmem_default;
 
index 105e3cd26763473fa1f39466456ceab6e4175dae..a5bc1fd8b0341f401b6b48ea7c26b2ac07d1ddb6 100644 (file)
@@ -317,6 +317,7 @@ static __net_init void preinit_net_sysctl(struct net *net)
         */
        net->core.sysctl_optmem_max = 128 * 1024;
        net->core.sysctl_txrehash = SOCK_TXREHASH_ENABLED;
+       net->core.sysctl_tstamp_allow_data = 1;
 }
 
 /* init code that must occur even if setup_net() is not called. */
index 74149dc4ee318d4489715510360918cce7dba566..00afeb90c23a9714043c2f720128676732f50ea8 100644 (file)
@@ -5506,7 +5506,7 @@ static bool skb_may_tx_timestamp(struct sock *sk, bool tsonly)
 {
        bool ret;
 
-       if (likely(READ_ONCE(sysctl_tstamp_allow_data) || tsonly))
+       if (likely(tsonly || READ_ONCE(sock_net(sk)->core.sysctl_tstamp_allow_data)))
                return true;
 
        read_lock_bh(&sk->sk_callback_lock);
index 846f494a17cf9614bb96505eec743df17574c138..083d438d8b6faff60e2e3cf1f982eb306a923cf7 100644 (file)
@@ -286,8 +286,6 @@ EXPORT_SYMBOL(sysctl_rmem_max);
 __u32 sysctl_wmem_default __read_mostly = SK_WMEM_MAX;
 __u32 sysctl_rmem_default __read_mostly = SK_RMEM_MAX;
 
-int sysctl_tstamp_allow_data __read_mostly = 1;
-
 DEFINE_STATIC_KEY_FALSE(memalloc_socks_key);
 EXPORT_SYMBOL_GPL(memalloc_socks_key);
 
index 86a2476678c484e0facc6fd051c8fd258d814ffc..b60fac380ceca8c085047bc34c5b2b55e69456b9 100644 (file)
@@ -491,15 +491,6 @@ static struct ctl_table net_core_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec,
        },
-       {
-               .procname       = "tstamp_allow_data",
-               .data           = &sysctl_tstamp_allow_data,
-               .maxlen         = sizeof(int),
-               .mode           = 0644,
-               .proc_handler   = proc_dointvec_minmax,
-               .extra1         = SYSCTL_ZERO,
-               .extra2         = SYSCTL_ONE
-       },
 #ifdef CONFIG_RPS
        {
                .procname       = "rps_sock_flow_entries",
@@ -665,6 +656,15 @@ static struct ctl_table netns_core_table[] = {
                .extra2         = SYSCTL_ONE,
                .proc_handler   = proc_dou8vec_minmax,
        },
+       {
+               .procname       = "tstamp_allow_data",
+               .data           = &init_net.core.sysctl_tstamp_allow_data,
+               .maxlen         = sizeof(u8),
+               .mode           = 0644,
+               .proc_handler   = proc_dou8vec_minmax,
+               .extra1         = SYSCTL_ZERO,
+               .extra2         = SYSCTL_ONE
+       },
        /* sysctl_core_net_init() will set the values after this
         * to readonly in network namespaces
         */