Message ID | 1476984408.7065.21.camel@edumazet-glaptop3.roam.corp.google.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Thu, 20 Oct 2016 10:26:48 -0700 > From: Eric Dumazet <edumazet@google.com> > > In commit 4ee3bd4a8c746 ("ipv4: disable BH when changing ip local port > range") Cong added BH protection in set_local_port_range() but missed > that same fix was needed in set_ping_group_range() > > Fixes: b8f1a55639e6 ("udp: Add function to make source port for UDP tunnels") > Signed-off-by: Eric Dumazet <edumazet@google.com> > Reported-by: Eric Salo <salo@google.com> Applied and queued up for -stable.
On Thu, Oct 20, 2016 at 10:26 AM, Eric Dumazet <eric.dumazet@gmail.com> wrote: > From: Eric Dumazet <edumazet@google.com> > > In commit 4ee3bd4a8c746 ("ipv4: disable BH when changing ip local port > range") Cong added BH protection in set_local_port_range() but missed > that same fix was needed in set_ping_group_range() Don't know why ping_group_range shares the same lock with local_port_range... Perhaps just for saving a few bytes, but that is why I missed this place.
On Thu, Oct 20, 2016 at 12:32 PM, Cong Wang <xiyou.wangcong@gmail.com> wrote: > On Thu, Oct 20, 2016 at 10:26 AM, Eric Dumazet <eric.dumazet@gmail.com> wrote: >> From: Eric Dumazet <edumazet@google.com> >> >> In commit 4ee3bd4a8c746 ("ipv4: disable BH when changing ip local port >> range") Cong added BH protection in set_local_port_range() but missed >> that same fix was needed in set_ping_group_range() > > Don't know why ping_group_range shares the same lock with local_port_range... > Perhaps just for saving a few bytes, but that is why I missed this place. Hold on... We clearly have typos there... Your fix is not correct.
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index 1cb67de106fe..500ae4010bed 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -109,10 +109,10 @@ static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t hig kgid_t *data = table->data; struct net *net = container_of(table->data, struct net, ipv4.ping_group_range.range); - write_seqlock(&net->ipv4.ip_local_ports.lock); + write_seqlock_bh(&net->ipv4.ip_local_ports.lock); data[0] = low; data[1] = high; - write_sequnlock(&net->ipv4.ip_local_ports.lock); + write_sequnlock_bh(&net->ipv4.ip_local_ports.lock); } /* Validate changes from /proc interface. */