@@ -4269,6 +4269,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
4269
4269
struct ctl_table * tbl ;
4270
4270
int idx , ret ;
4271
4271
size_t ctl_table_size = ARRAY_SIZE (vs_vars );
4272
+ bool unpriv = net -> user_ns != & init_user_ns ;
4272
4273
4273
4274
atomic_set (& ipvs -> dropentry , 0 );
4274
4275
spin_lock_init (& ipvs -> dropentry_lock );
@@ -4283,10 +4284,6 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
4283
4284
tbl = kmemdup (vs_vars , sizeof (vs_vars ), GFP_KERNEL );
4284
4285
if (tbl == NULL )
4285
4286
return - ENOMEM ;
4286
-
4287
- /* Don't export sysctls to unprivileged users */
4288
- if (net -> user_ns != & init_user_ns )
4289
- ctl_table_size = 0 ;
4290
4287
} else
4291
4288
tbl = vs_vars ;
4292
4289
/* Initialize sysctl defaults */
@@ -4312,10 +4309,17 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
4312
4309
ipvs -> sysctl_sync_ports = 1 ;
4313
4310
tbl [idx ++ ].data = & ipvs -> sysctl_sync_ports ;
4314
4311
tbl [idx ++ ].data = & ipvs -> sysctl_sync_persist_mode ;
4312
+
4315
4313
ipvs -> sysctl_sync_qlen_max = nr_free_buffer_pages () / 32 ;
4314
+ if (unpriv )
4315
+ tbl [idx ].mode = 0444 ;
4316
4316
tbl [idx ++ ].data = & ipvs -> sysctl_sync_qlen_max ;
4317
+
4317
4318
ipvs -> sysctl_sync_sock_size = 0 ;
4319
+ if (unpriv )
4320
+ tbl [idx ].mode = 0444 ;
4318
4321
tbl [idx ++ ].data = & ipvs -> sysctl_sync_sock_size ;
4322
+
4319
4323
tbl [idx ++ ].data = & ipvs -> sysctl_cache_bypass ;
4320
4324
tbl [idx ++ ].data = & ipvs -> sysctl_expire_nodest_conn ;
4321
4325
tbl [idx ++ ].data = & ipvs -> sysctl_sloppy_tcp ;
@@ -4338,15 +4342,22 @@ static int __net_init ip_vs_control_net_init_sysctl(struct netns_ipvs *ipvs)
4338
4342
tbl [idx ++ ].data = & ipvs -> sysctl_conn_reuse_mode ;
4339
4343
tbl [idx ++ ].data = & ipvs -> sysctl_schedule_icmp ;
4340
4344
tbl [idx ++ ].data = & ipvs -> sysctl_ignore_tunneled ;
4345
+
4341
4346
ipvs -> sysctl_run_estimation = 1 ;
4347
+ if (unpriv )
4348
+ tbl [idx ].mode = 0444 ;
4342
4349
tbl [idx ].extra2 = ipvs ;
4343
4350
tbl [idx ++ ].data = & ipvs -> sysctl_run_estimation ;
4344
4351
4345
4352
ipvs -> est_cpulist_valid = 0 ;
4353
+ if (unpriv )
4354
+ tbl [idx ].mode = 0444 ;
4346
4355
tbl [idx ].extra2 = ipvs ;
4347
4356
tbl [idx ++ ].data = & ipvs -> sysctl_est_cpulist ;
4348
4357
4349
4358
ipvs -> sysctl_est_nice = IPVS_EST_NICE ;
4359
+ if (unpriv )
4360
+ tbl [idx ].mode = 0444 ;
4350
4361
tbl [idx ].extra2 = ipvs ;
4351
4362
tbl [idx ++ ].data = & ipvs -> sysctl_est_nice ;
4352
4363
0 commit comments