Commit 1a680e54 authored by WANG Cong's avatar WANG Cong Committed by Greg Kroah-Hartman

ipv4: use the right lock for ping_group_range

[ Upstream commit 396a30cc ]

This reverts commit a681574c
("ipv4: disable BH in set_ping_group_range()") because we never
read ping_group_range in BH context (unlike local_port_range).

Then, since we already have a lock for ping_group_range, those
using ip_local_ports.lock for ping_group_range are clearly typos.

We might consider to share a same lock for both ping_group_range
and local_port_range w.r.t. space saving, but that should be for
net-next.

Fixes: a681574c ("ipv4: disable BH in set_ping_group_range()")
Fixes: ba6b918a ("ping: move ping_group_range out of CONFIG_SYSCTL")
Cc: Eric Dumazet <edumazet@google.com>
Cc: Eric Salo <salo@google.com>
Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 827ada2d
...@@ -97,11 +97,11 @@ static void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t *low ...@@ -97,11 +97,11 @@ static void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t *low
container_of(table->data, struct net, ipv4.ping_group_range.range); container_of(table->data, struct net, ipv4.ping_group_range.range);
unsigned int seq; unsigned int seq;
do { do {
seq = read_seqbegin(&net->ipv4.ip_local_ports.lock); seq = read_seqbegin(&net->ipv4.ping_group_range.lock);
*low = data[0]; *low = data[0];
*high = data[1]; *high = data[1];
} while (read_seqretry(&net->ipv4.ip_local_ports.lock, seq)); } while (read_seqretry(&net->ipv4.ping_group_range.lock, seq));
} }
/* Update system visible IP port range */ /* Update system visible IP port range */
...@@ -110,10 +110,10 @@ static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t hig ...@@ -110,10 +110,10 @@ static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t hig
kgid_t *data = table->data; kgid_t *data = table->data;
struct net *net = struct net *net =
container_of(table->data, struct net, ipv4.ping_group_range.range); container_of(table->data, struct net, ipv4.ping_group_range.range);
write_seqlock_bh(&net->ipv4.ip_local_ports.lock); write_seqlock(&net->ipv4.ping_group_range.lock);
data[0] = low; data[0] = low;
data[1] = high; data[1] = high;
write_sequnlock_bh(&net->ipv4.ip_local_ports.lock); write_sequnlock(&net->ipv4.ping_group_range.lock);
} }
/* Validate changes from /proc interface. */ /* Validate changes from /proc interface. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment