diff options
author | Paolo Abeni <pabeni@redhat.com> | 2016-03-22 11:19:38 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-04-20 09:42:05 +0300 |
commit | 2ddb181390475f4902406baa008c220f39aeaa69 (patch) | |
tree | f5395a0ab6b3c05c246753ca9abfe80f1eaf6b5d | |
parent | 8178211eb7948b40b1f730e2d0b9b0a7a2ed62d1 (diff) | |
download | linux-2ddb181390475f4902406baa008c220f39aeaa69.tar.xz |
ipv4: fix broadcast packets reception
[ 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>
-rw-r--r-- | net/ipv4/udp.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 7f8ab46adf61..21fbb54f11d0 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1990,10 +1990,14 @@ void udp_v4_early_demux(struct sk_buff *skb) 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) { |