| From foo@baz Sat Apr 16 22:36:37 PDT 2016 |
| From: Paolo Abeni <pabeni@redhat.com> |
| Date: Tue, 22 Mar 2016 09:19:38 +0100 |
| Subject: ipv4: fix broadcast packets reception |
| Status: RO |
| Content-Length: 1329 |
| Lines: 43 |
| |
| From: Paolo Abeni <pabeni@redhat.com> |
| |
| [ Upstream commit ad0ea1989cc4d5905941d0a9e62c63ad6d859cef ] |
| |
| Currently, ingress ipv4 broadcast datagrams are dropped since, |
| in udp_v4_early_demux(), ip_check_mc_rcu() is invoked even on |
| bcast packets. |
| |
| This patch addresses the issue, invoking ip_check_mc_rcu() |
| only for mcast packets. |
| |
| Fixes: 6e5403093261 ("ipv4/udp: Verify multicast group is ours in upd_v4_early_demux()") |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/udp.c | 12 ++++++++---- |
| 1 file changed, 8 insertions(+), 4 deletions(-) |
| |
| --- a/net/ipv4/udp.c |
| +++ b/net/ipv4/udp.c |
| @@ -1939,10 +1939,14 @@ void udp_v4_early_demux(struct sk_buff * |
| if (!in_dev) |
| return; |
| |
| - ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr, |
| - iph->protocol); |
| - if (!ours) |
| - return; |
| + /* we are supposed to accept bcast packets */ |
| + if (skb->pkt_type == PACKET_MULTICAST) { |
| + ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr, |
| + iph->protocol); |
| + if (!ours) |
| + return; |
| + } |
| + |
| sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr, |
| uh->source, iph->saddr, dif); |
| } else if (skb->pkt_type == PACKET_HOST) { |