netfilter: ipvs: Fix inappropriate output of procfs
Information about ipvs in different network namespace can be seen via procfs.
How to reproduce:
# ip netns add ns01
# ip netns add ns02
# ip netns exec ns01 ip a add dev lo 127.0.0.1/8
# ip netns exec ns02 ip a add dev lo 127.0.0.1/8
# ip netns exec ns01 ipvsadm -A -t 10.1.1.1:80
# ip netns exec ns02 ipvsadm -A -t 10.1.1.2:80
The ipvsadm displays information about its own network namespace only.
# ip netns exec ns01 ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.1:80 wlc
# ip netns exec ns02 ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.1.2:80 wlc
But I can see information about other network namespace via procfs.
# ip netns exec ns01 cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 0A010101:0050 wlc
TCP 0A010102:0050 wlc
# ip netns exec ns02 cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 0A010102:0050 wlc
Signed-off-by: KUWAZAWA Takuya <albatross0@gmail.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
c5cc0c6971
commit
c5504f724c
@@ -2034,12 +2034,16 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
|
|||||||
seq_puts(seq,
|
seq_puts(seq,
|
||||||
" -> RemoteAddress:Port Forward Weight ActiveConn InActConn\n");
|
" -> RemoteAddress:Port Forward Weight ActiveConn InActConn\n");
|
||||||
} else {
|
} else {
|
||||||
|
struct net *net = seq_file_net(seq);
|
||||||
|
struct netns_ipvs *ipvs = net_ipvs(net);
|
||||||
const struct ip_vs_service *svc = v;
|
const struct ip_vs_service *svc = v;
|
||||||
const struct ip_vs_iter *iter = seq->private;
|
const struct ip_vs_iter *iter = seq->private;
|
||||||
const struct ip_vs_dest *dest;
|
const struct ip_vs_dest *dest;
|
||||||
struct ip_vs_scheduler *sched = rcu_dereference(svc->scheduler);
|
struct ip_vs_scheduler *sched = rcu_dereference(svc->scheduler);
|
||||||
char *sched_name = sched ? sched->name : "none";
|
char *sched_name = sched ? sched->name : "none";
|
||||||
|
|
||||||
|
if (svc->ipvs != ipvs)
|
||||||
|
return 0;
|
||||||
if (iter->table == ip_vs_svc_table) {
|
if (iter->table == ip_vs_svc_table) {
|
||||||
#ifdef CONFIG_IP_VS_IPV6
|
#ifdef CONFIG_IP_VS_IPV6
|
||||||
if (svc->af == AF_INET6)
|
if (svc->af == AF_INET6)
|
||||||
|
|||||||
Reference in New Issue
Block a user